2009-11-30 9 views
9

एएनएसआई सी (सी 99) चेतावनियों/त्रुटियों को लागू करने के लिए मैं किस जीसीसी विकल्प का उपयोग करूंगा? जीसीसी (जीसीसी) 3.4.2 (MinGW-विशेष)Ansi सी मानक जांच को लागू करने के लिए जीसीसी विकल्प?

मैं उपयोग कर रहा हूँ: जीसीसी -pedantic -ansi -std = c99 यह सही है?

+0

एएनएसआई ने 1 9 8 9 में मूल सी मानक प्रकाशित किया। आईएसओ ने 1 99 0 में उसी मानक के अपने संस्करण को प्रकाशित किया, और एएनएसआई ने आधिकारिक तौर पर उस संस्करण को अपनाया। आईएसओ ने 1 999 और 2011 में मानक के नए संस्करण प्रकाशित किए, और एएनएसआई ने उनमें से प्रत्येक को अपनाया है, जो पहले के संस्करणों को आधिकारिक रूप से अप्रचलित बना रहा है। उलझन में, "एएनएसआई सी" शब्द अभी भी सामान्य रूप से (और गलत तरीके से) 1 9 8 9/1 9 0 9 संस्करणों द्वारा परिभाषित भाषा को संदर्भित करने के लिए प्रयोग किया जाता है, और 'gcc -ansi' अभी भी उस संस्करण को संदर्भित करता है। मेरा सुझाव है कि "एएनएसआई सी" शब्द संदिग्ध है और इससे बचा जाना चाहिए। इसके बजाय C89/C90, C99, या C11 का संदर्भ लें। –

उत्तर

19

-ansi ध्वज -std=c89 ध्वज का पर्याय बन गया है।

-std=c99 का उपयोग -pedantic के साथ पर्याप्त होना चाहिए।

संदेह में, आप हमेशा refer to the GCC documentation कर सकते हैं। जीसीसी 3.4.2 के अनुसार, पढ़ने के लिए अध्याय 2 - Language Standards Supported by GCC है।

3
-ansi 
    In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98. 

एएनएसआई सी सी 99 (अभी तक) के समान नहीं है। इसके अलावा, -Wall भी रुचि का हो सकता है, लेकिन केवल -pedantic आपको जो चाहिए वह करना चाहिए।

+5

"एएनएसआई सी सी 99 के समान नहीं है"। एएनएसआई ने सी 99 को मानक के रूप में अपनाया है। यह सिर्फ इतना है कि किसी भी कारण से, C89 को "एएनएसआई सी" कहा जाता है, इसे पूर्व-मानक सी से अलग करने के लिए, और नाम चारों ओर फंस गया है। –

7

यह एक पुराना सवाल है लेकिन मैं बस कुछ अतिरिक्त अंक जोड़ना चाहता था।

सबसे पहले, सामान्य कमांड लाइन के सेट की परवाह किए बिना आप जीसीसी की आपूर्ति स्विच, वर्तमान में यह सब बाधा के उल्लंघन की रिपोर्ट करने के लिए जीसीसी "त्रुटियों" और "चेतावनी के रूप में सब कुछ के रूप में बनाने के लिए संभव हो सकता है प्रकट नहीं होता है "। कुछ नैदानिक ​​संदेश जीसीसी रिपोर्ट "चेतावनियों" के रूप में रिपोर्ट करते हैं वास्तव में सी भाषा के दृष्टिकोण से बाधा उल्लंघन (यानी "त्रुटियां") हैं, लेकिन जीसीसी को उस तथ्य को पहचानने और "त्रुटि" उत्पन्न करने का कोई तरीका नहीं है। नैदानिक। काफी संभव है कि व्यक्तिगत चेतावनी प्रकारों को ठीक-ठीक करके एक और सटीक पृथक्करण प्राप्त किया जा सके, लेकिन मुझे यकीन नहीं है कि जीसीसी सेटिंग्स एक अच्छा मैच प्राप्त करने के लिए पर्याप्त ग्रैन्युलरिटी प्रदान करती है।

दूसरे, जीसीसी -pedantic-errors विकल्प है कि सादा -pedantic के स्थान पर है, जो "त्रुटियों" और "चेतावनी" में नैदानिक ​​संदेशों के एक और अधिक सटीक (ऊपर वर्णित है) वर्गीकरण सक्षम करना है में इस्तेमाल किया जा सकता प्रदान करता है। हालांकि यह अभी भी सही नहीं है।

पीएस भाषा विनिर्देश को डायग्नोस्टिक संदेशों को "त्रुटियों" और "चेतावनियों" में अलग करने की आवश्यकता/परिभाषित करने की आवश्यकता नहीं है, लेकिन व्यवहार में कई प्रोग्रामर बाधाओं के उल्लंघनों को "त्रुटियों" के रूप में रिपोर्ट करने की अपेक्षा करते हैं। मैंने सोचा था कि जब आप अपने प्रश्न में "चेतावनी/त्रुटियों को लागू करने" का उल्लेख करते हैं तो आप ऐसा कुछ मतलब कर सकते हैं।

+0

अच्छा अवलोकन। किसी भी दर पर, मेरा मानना ​​है कि सी इतनी खतरनाक चीजों की इजाजत देता है, काम करने का एकमात्र तरीका तरीका * किसी * चेतावनी को एक त्रुटि के रूप में संभालना है (यानी आप तब तक नहीं किए जाते जब तक कि यह 'वायुयान' के साथ नहीं बनता)। फिर इससे कोई फर्क नहीं पड़ता कि कुछ त्रुटियों को चेतावनियों के रूप में गलत तरीके से रिपोर्ट किया गया है। – sleske

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