अन्य लोगों के अलावा अन्य लोगों ने क्या चेतावनी दी है?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
अन्य लोगों के अलावा अन्य लोगों ने क्या चेतावनी दी है?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
जवाबों:
मैं नियमित रूप से उपयोग करता हूं:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
यह सेट अप्रयुक्त लोगों के लिए बहुत कुछ पकड़ता है (जिन लोगों का कोड मुझे पहली बार उन झंडों के साथ संकलित करने के लिए मिलता है); यह शायद ही कभी मुझे एक समस्या देता है (हालांकि -वॉक-क्वाल कभी-कभार उपद्रव होता है)।
-O3
कुछ इसी तरह जोड़ना या जोड़ना एक अच्छा विचार है ; ऐसी चेतावनियाँ हैं जो कोड के अनुकूलित होने पर ही उत्पन्न होती हैं।
-m32
और -m64
(अलग रन में, निश्चित रूप से) जिस तरह से आप का उपयोग में विभिन्न कीड़ों से बेहतर सुरक्षा प्रदान करता है printf()
और scaf()
रूपांतरण विनिर्देशों।
2011-09-01 तक, gcc संस्करण 4.6.1 के साथ
मेरा वर्तमान "विकास" उर्फ
gcc -std = c89--antic -Wall \ -वह-गायब-ब्रेसिज़ -Witchitch-default -Wswitch-enum -Wcast-align -Wpointer-arith \ -वार्ड-फंक्शन-कास्ट-वर्स्टिक्ट-ओवरफ्लो = 5 -स्ट्रिक्ट-प्रोटोटाइप -विलाइन \ -Wefef -Wnested-externs -Wcast-qual -Wshadow -Wunreachable-code \ -वोलॉजिकल-ऑप -Wloloat-equal-Vstrict-aliasing = 2-विखंडन-दशमी -विस्तृत-शैली-परिभाषा -ddb3 \ -ओ0 \ _ -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \ -lm
"रिलीज़" उर्फ
gcc -std = c89 -pedantic -O3 -DNDEBUG -flto -lm
2009-11-03 तक
"विकास" उर्फ
gcc -Wall -Wextra -Wformat = 2 -Wswitch-default -Wcast-align -Wpointer-arith \ -वार्ड-फंक्शन-कास्ट -स्ट्रिक्ट-प्रोटोटाइप -Winline -Wundef -Westedested-externs -वॉस्क-क्वाल -Whadhad -Wwrite-strings -Wconversion -Wunreachable-code \ -विस्तार-अलियासिंग = 2 -फ्लोट-स्टोर -fno-common -fstrict-aliasing + -lm -std = c89--antic -O0 -ggdb3 -pg --coverage
"रिलीज" उर्फ
gcc -lm -std = c89--antic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
-Wfloat-equal
मेरे उपनाम में जोड़ा गया। धन्यवाद मार्क
-Wstrict-aliasing=2
वास्तव में गर्भपात के चेतावनी स्तर को कम करता -Wstrict-aliasing=3
है -Wall
, कम से कम जीसीसी के हालिया संस्करण के साथ।
मुझे पसंद है -वायरर। कोड को चेतावनी मुक्त रखता है।
#warning
उपयोग करने के एक अच्छे दुष्प्रभाव से छुटकारा पाने पर विचार करता हूं -Werror
।
-Werror
अपने बिल्ड में डिफ़ॉल्ट रूप से इसका उपयोग न करें, यह पैकवाइज एनाउंस करता है, जो आपके लिए अलग-अलग कंपाइलर संस्करणों का उपयोग कर रहे हैं क्योंकि कंपाइलर संस्करण के साथ चेतावनियों में परिवर्तन होता है, कभी-कभी कोड जो आपके लिए मुफ्त चेतावनी दे रहा है, किसी और के लिए चेतावनी होगी फिर उन्हें इसे बंद करने के लिए आपके निर्माण तंत्र में खुदाई करनी होगी।
मैंने C ++ से शुरुआत की, इसलिए जब मैंने CI सीखने के लिए स्विच किया, तो यह सुनिश्चित हो गया कि अतिरिक्त-गुदा हो:
-fmessage-लंबाई = 0 -सांय-उद्विग्न-अस्त = c99 -Werror -दीवार -Wextra -Wwrite-तार -Winit आत्म -Wcast-align -Wcast-qual -Wpointer-arith -Wstrict अलियासिंग -Wformat = 2 -Wmissing-घोषणाओं -Wmissing-शामिल-dirs -Wno-अप्रयुक्त पैरामीटर -Wuninitialized -Wold शैली परिभाषा -Wstrict-प्रोटोटाइप -Wmissing-प्रोटोटाइप
आपके द्वारा उपयोग किए जाने वाले जीसीसी संस्करण के लिए मैनुअल प्राप्त करें, सभी चेतावनी के विकल्प उपलब्ध हैं , और फिर केवल उन्हीं को निष्क्रिय करें जिनके लिए आपके पास ऐसा करने के लिए एक सम्मोहक कारण है। (उदाहरण के लिए, गैर-परिवर्तनीय तृतीय-पक्ष हेडर जो आपको बहुत सारी चेतावनी देंगे अन्यथा।) उन कारणों का दस्तावेजीकरण करें। (मेकफाइल या जहाँ भी आप उन विकल्पों को सेट करते हैं।) नियमित अंतराल पर सेटिंग्स की समीक्षा करें, और जब भी आप अपने कंपाइलर को अपग्रेड करें।
संकलक आपका मित्र है। चेतावनियां तुम्हारी मित्र हैं। संकलक को यथासंभव संभावित समस्याओं को बताने का मौका दें।
मैं भी उपयोग करता हूं:
-Wstrict-अतिप्रवाह = 5
उन बुरा कीड़े कि पकड़ने के लिए कर सकते हैं तब आते हैं, मैं कोड है कि पूर्णांक अतिप्रवाह व्यवहार पर निर्भर करता है लिखते हैं।
तथा:
-Wextra
जो कुछ विकल्पों को सक्षम करता है जो कि अच्छा है। अधिकांश C ++ के लिए हैं।
मैं आमतौर पर "-W -Wall -ansi-upantic" के साथ संकलन करता हूं, इससे कोड की अधिकतम गुणवत्ता और पोर्टेबिलिटी सुनिश्चित करने में मदद मिलती है।
-वेदिक -वैल -वैक्रा -वॉन-राइटिंग-स्ट्रिंग -व्यू-अप्रयुक्त-पैरामीटर
"मुझे बहुत चोट लगी" मोड के लिए, मैं दूर छोड़ देता हूँ -नहीं ...
मुझे अपना कोड चेतावनी मुक्त होना पसंद है, खासकर C ++ के साथ। जबकि सी कंपाइलर चेतावनियों को अक्सर नजरअंदाज किया जा सकता है, कई सी ++ चेतावनी स्रोत कोड में मूलभूत दोष दिखाते हैं।
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
- यदि ट्रिगर हो सकता है - स्पॉट के लिए अपेक्षाकृत कठिन। यदि आप उस चेतावनी से परेशान हैं, तो आपको बस पैरामीटर को आउटकम करना चाहिए foo (int /*q*/)
, इससे आपके कोड की पठनीयता भी बढ़ जाती है।
-वफ़ल-बराबर, -वशादो; -विस्मृति-प्रोटोटाइप,
अभी मैं उपयोग करता हूं:
-WW -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
मैंने उस सूची को ज्यादातर "एन इंट्रोडक्शन टू जीसीसी" पुस्तक से लिया और फिर कुछ डिफ्रेंट प्रोग्रामिंग ( http://people.redhat.com/drepper/Defensive-slides.pdf ) के बारे में उलरिच ड्रेपर के पुनर्मिलन से ।
लेकिन मेरी सूची के पीछे कोई विज्ञान नहीं है, यह सिर्फ एक अच्छी सूची की तरह लगा।
/ जोहान
नोट: मुझे उन पंडितों के झंडे पसंद नहीं हैं, हालांकि ...।
ध्यान दें: मुझे लगता है कि -Wext और कमोबेश एक ही चीज हैं।
मैं आमतौर पर सिर्फ उपयोग करता हूं
gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o
-Wfatal-errors
-Wdeclaration-after-statement
कोड का पता लगाने के लिए ' ' को जोड़ना होगा कि MSVC (जो अभी भी मूल रूप से C89 संकलक है) संभाल नहीं पाएगा। 'तीस एक उपद्रव। '-Wextra
' जोड़ने से कुछ अन्य समस्याएं भी हो सकती हैं।