2012-11-30 64 views
5

मैं हाल ही में एक मुद्दा में भाग जहां निम्नलिखित खिलौना उदाहरण सफाई से clang -ansi का उपयोग कर संकलित:`बजना -ansi` एक्सटेंशन

a.c: In function ‘main’: 
a.c:3:5: error: ‘for’ loop initial declarations are only allowed in C99 mode 
a.c:3:5: note: use option -std=c99 or -std=gnu99 to compile your code 

clang -ansi -pedantic शो के साथ संकलन:

int main(void) 
{ 
    for (int i = 0; 0;); 
    return i; 
} 

लेकिन gcc -ansi निम्न त्रुटि देता है कि एक सी 99 विस्तार का उपयोग किया जा रहा है।

a.c:3:10: warning: variable declaration in for loop is a C99-specific feature [-pedantic,-Wc99-extensions] 
    for (int i = 0; 0;); 
     ^
1 warning generated. 

क्लैंग -ansi विकल्प के साथ अन्य एक्सटेंशन क्या अनुमति देता है? मैं उन्हें कैसे अक्षम कर सकता हूं? -pedantic-errors बजाय -pedantic, या -Werror (या दोनों) का उपयोग करें:

+0

मैं कुछ ही मिनट पहले इसी तरह की समस्या में भाग गया: क्लैंग एक वैरिएबल को उसी ब्लॉक में निष्पादन योग्य कोड के बाद परिभाषित करने की अनुमति देता है - सी 99 में कानूनी लेकिन एएनएसआई में अवैध होना चाहिए। – cdarke

+0

उपरोक्त पूरा उदाहरण सी 99 में भी गैरकानूनी है, क्योंकि 'i' को परिभाषित नहीं किया जाता है जब इसे रिटर्न स्टेटमेंट में उपयोग किया जाता है। क्लैंग और जीसीसी इस पर सहमत हैं। ऐसा लगता है कि सी 99 एक्सटेंशन के इस विशेष उपयोग से यह कानूनी हो जाता है। – cyang

+0

आप सही हैं, मैंने देखा नहीं है कि ओपीएस कोड में (मेरे अपने मुद्दों पर बहुत अधिक ध्यान केंद्रित करना)। – cdarke

उत्तर

4

आप तो आप चाहते हैं इन चेतावनियों त्रुटियों के रूप में इलाज, -ansi मोड में एक्सटेंशन को अक्षम करने की कोशिश कर रहे हैं। त्रुटियों पर अधिक सुदृढ़ नियंत्रण के लिए, Clang manual देखें।

+0

धन्यवाद। ऐसा लगता है कि '-ansi' मोड में सक्षम एक्सटेंशन की सूची हालांकि कोई नहीं है। – cyang