मैं हाल ही में एक मुद्दा में भाग जहां निम्नलिखित खिलौना उदाहरण सफाई से 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
(या दोनों) का उपयोग करें:
मैं कुछ ही मिनट पहले इसी तरह की समस्या में भाग गया: क्लैंग एक वैरिएबल को उसी ब्लॉक में निष्पादन योग्य कोड के बाद परिभाषित करने की अनुमति देता है - सी 99 में कानूनी लेकिन एएनएसआई में अवैध होना चाहिए। – cdarke
उपरोक्त पूरा उदाहरण सी 99 में भी गैरकानूनी है, क्योंकि 'i' को परिभाषित नहीं किया जाता है जब इसे रिटर्न स्टेटमेंट में उपयोग किया जाता है। क्लैंग और जीसीसी इस पर सहमत हैं। ऐसा लगता है कि सी 99 एक्सटेंशन के इस विशेष उपयोग से यह कानूनी हो जाता है। – cyang
आप सही हैं, मैंने देखा नहीं है कि ओपीएस कोड में (मेरे अपने मुद्दों पर बहुत अधिक ध्यान केंद्रित करना)। – cdarke