2012-12-04 15 views
8

मैंने एक बेवकूफ गलती की (अर्धविराम भूल गया, हाल ही में पाइथन बहुत भूल गया), लेकिन जीसीसी से एक दिलचस्प त्रुटि संदेश मिला: "अपेक्षित ',' या ';' 'अगर' से पहले "।अपेक्षित, या; इससे पहले कि

मुझे पता है कि उन त्रुटि संदेशों को संभव स्रोत कोड के लिए केवल "ऊपरी बाउंड" प्रदान किया जाता है, लेकिन मुझे यह जानना है कि सी में कोई निर्माण है या नहीं, "अगर" टोकन वास्तव में ',' के बाद आता है और बाद में नहीं ';'।

+1

और इस तरह आप कैसे झुकाव के लिए स्विच किया। –

+0

@ एच 2CO3 केवल एक गुप्त त्रुटि संदेश के लिए? यदि आप जीसीसी से भागने के वास्तविक कारण की तलाश में हैं, तो मैं इसके स्रोत कोड, या कोडिंग मानक पढ़ूंगा। – Lundin

+0

@ लुंडिन कोडिंग मानक जीसीसी से संबंधित नहीं है - यह सामान्य रूप से जीएनयू से संबंधित है। इसके अलावा, आपको लगता है कि मेरा मुद्दा नहीं मिला है - यह केवल एक गुप्त त्रुटि संदेश नहीं है, क्लैंग सामान्य रूप से अधिक सार्थक और दृष्टि से बेहतर चेतावनियां उत्पन्न करता है। (Sidenote: मैं अभी भी सभी जीसीसी के लिए हूँ।) –

उत्तर

6

के तुरंत बाद आवश्यक नहीं है। त्रुटि संदेश अधिक है: 'मैंने अभी' अगर 'निर्माण किया है। इस बिंदु पर मैं या तो (पिछला) कथन, या सूची में अगला आइटम का अंत करने की उम्मीद कर रहा था। उन चीजों में से एक यह 'अगर' से पहले होना चाहिए, इसलिए मैं आपको बता रहा हूं कि '

+0

मेरी गलती, जीसीसी सही है। पिछली पंक्ति एक स्थानीय चर (एक प्रारंभिक के साथ एक ब्लॉक के लिए स्थानीय) की घोषणा थी, और यह वास्तव में एक "सूची" है। धन्यवाद। (मैंने सोचा था कि पिछली पंक्ति एक असाइनमेंट कथन थी, और ',' बस वहां लागू नहीं हुआ था।) – Veky

+0

बस पूछने वाला था कि आप उस पंक्ति में क्या कर रहे थे। ठंडा – mcalex

+0

यह संभवतः सच है, लेकिन पूछा गया वास्तविक प्रश्न का उत्तर "नहीं" है, जैसा कि नोल्वेन द्वारा समझाया गया है। – ams

5

मैं जानना चाहता हूं कि सी में कोई निर्माण है या नहीं, "अगर" टोकन वास्तव में बाद में आता है, 'और' के बाद नहीं ';

C BNF grammar के अनुसार, एक ifहमेशा एक बयान की शुरुआत में है। तो नहीं, यह , से पहले नहीं किया जा सकता है।

1

नहीं, ऐसी कोई स्थिति नहीं है जहां if कथन से पहले कोई कॉमा दिखाई दे। तो यह जीसीसी में एक कंपाइलर टाइपो/बग होना चाहिए।

मुझे लगता है कि जीसीसी पार्सर एक बयान से पहले sequence point ढूंढ रहा है। अर्धविराम पर एक अनुक्रम बिंदु है, लेकिन एक ऐसा भी है जहां अल्पविराम के लिए अल्पविराम ऑपरेटर का उपयोग किया जाता है। तो ऐसा लगता है कि पूरे बयान और अभिव्यक्तियों में त्रुटियों के लिए त्रुटि प्रिंटिंग वही है, किसी भी तरह।

+0

नहीं, यह नहीं है। अनुक्रम बिंदु '&&' पर भी हैं, उदाहरण के लिए, और इसका उल्लेख नहीं किया गया है। – Veky

+0

@ user1875565 यह किसी भी दिमाग पढ़ने के अनुमान के रूप में अच्छा है। वैसे भी, त्रुटि पाठ सही नहीं है, जहां तक ​​सी मानक का संबंध है। – Lundin

संबंधित मुद्दे