आप नहीं कर सकते।
GCC 4.4.0 के लिए मैनुअल केवल उस संस्करण के लिए व्यापक है, लेकिन यह 4.4.0 के लिए सभी संभावित चेतावनियों को सूचीबद्ध करता है। वे सभी पृष्ठ पर नहीं हैं, हालांकि आप लिंक करते हैं, उदाहरण के लिए कुछ भाषा-विशिष्ट विकल्प C ++ विकल्प या Obj-C विकल्पों के लिए पृष्ठों पर हैं। उन सभी को खोजने के लिए आप विकल्प सारांश को देखना बेहतर समझते हैं
सब कुछ चालू करना शामिल होगा -Wdouble-promotion
जो केवल 32-बिट एकल-सटीक फ़्लोटिंग-पॉइंट इकाई के साथ सीपीयू पर प्रासंगिक है जो float
हार्डवेयर में लागू होता है, लेकिन double
सॉफ्टवेयर में अनुकरण करता है। के रूप में गणना कर double
सॉफ्टवेयर अनुकरण का उपयोग करें और धीमी हो जाएगा। यह कुछ एम्बेडेड सीपीयू के लिए प्रासंगिक है, लेकिन 64-बिट फ्लोटिंग-पॉइंट के लिए हार्डवेयर समर्थन के साथ आधुनिक डेस्कटॉप सीपीयू के लिए पूरी तरह अप्रासंगिक है।
एक और चेतावनी जो आमतौर पर उपयोगी नहीं होती है -Wtraditional
, जो पारंपरिक सी, जैसे "string " "concatenation"
, या आईएसओ सी फ़ंक्शन परिभाषाओं में एक अलग अर्थ (या काम नहीं करता है) के बारे में पूरी तरह से अच्छी तरह से गठित कोड के बारे में चेतावनी देती है ! क्या आप वास्तव में 30 साल पुराने संकलक के साथ संगतता की परवाह करते हैं? क्या आप वास्तव में लिखने के लिए चेतावनी चाहते हैं int inc(int i) { return i+1; }
?
मुझे लगता -Weffc++
है कि उपयोगी होने के लिए बहुत शोर है, यह प्रभावी C ++ के पुराने पहले संस्करण पर आधारित है और उन निर्माणों के बारे में चेतावनी देता है जो पूरी तरह से वैध हैं C ++ (और जिसके लिए दिशानिर्देश पुस्तक के बाद के संस्करणों में बदल गए।) मैं नहीं बनना चाहता। चेतावनी दी कि मैंने std::string
अपने निर्माता में एक सदस्य को इनिशियलाइज़ नहीं किया है ; इसका एक डिफ़ॉल्ट निर्माता है जो वास्तव में वही करता है जो मैं चाहता हूं, मुझे m_str()
इसे कॉल करने के लिए क्यों लिखना चाहिए ? -Weffc++
चेतावनी है कि मददगार होगा भी मुश्किल संकलक का पता लगाने के लिए सही ढंग से (मिथ्या नकारात्मक दे रही है) कर रहे हैं, और इस तरह के सभी सदस्यों को स्पष्ट रूप से प्रारंभ करने के रूप में जो कि उपयोगी नहीं हैं, बहुत ज्यादा शोर उत्पादन, झूठे सकारात्मक दे रही है।
ल्यूक डैंटन ने बेकार चेतावनी का एक बड़ा उदाहरण प्रदान किया -Waggregate-return
जो लगभग निश्चित रूप से सी ++ कोड के लिए कभी भी समझ में नहीं आता है।
यानी आप वास्तव में सभी चेतावनियों को नहीं चाहते हैं , आप बस सोचते हैं कि आप करते हैं।
मैनुअल के माध्यम से जाओ, उनके बारे में पढ़ें, तय करें कि आप सक्षम करना चाहते हैं, उन्हें आज़मा सकते हैं। अपने कंपाइलर के मैनुअल को पढ़ना वैसे भी एक अच्छा थिंग टीएम है, शॉर्ट कट लेना और ऐसी चेतावनियों को सक्षम करना जो आपको समझ में नहीं आते हैं, यह बहुत अच्छा विचार नहीं है, खासकर अगर यह आरटीएफएम से बचने के लिए है।
जो कोई भी सब कुछ बदल देता है, वह शायद इसलिए या तो कर रहा है क्योंकि वे अनाड़ी हैं क्योंकि या एक नुकीले बालों वाले मालिक ने कहा "कोई चेतावनी नहीं।"
कुछ चेतावनी महत्वपूर्ण हैं, और कुछ नहीं हैं। आपको भेदभाव करना होगा या आप अपने कार्यक्रम को गड़बड़ कर देंगे। उदाहरण के लिए, पर विचार करें -Wdouble-promotion
। यदि आप एक एम्बेडेड सिस्टम पर काम कर रहे हैं तो आप यह चाहते हैं; यदि आप एक डेस्कटॉप सिस्टम पर काम कर रहे हैं जो आप शायद नहीं करते हैं। और क्या आप चाहते हैं -Wtraditional
? मुझे शक है।
संपादित करें: यह भी देखें -सभी-सभी चेतावनी को सक्षम करने के लिए जो कि WONTFIX के रूप में बंद है।
संपादित करें 2: मेकफ़ाइल्स के बारे में देवसेलर की शिकायत के जवाब में संकलक संस्करण के आधार पर विभिन्न चेतावनियों का उपयोग करने की आवश्यकता है, यदि -Wall -Wextra
उपयुक्त नहीं है तो संकलक-विशिष्ट और संस्करण-विशिष्ट CFLAGS का उपयोग करना मुश्किल नहीं है:
compiler_name := $(notdir $(CC))
ifeq ($(compiler_name),gcc)
compiler_version := $(basename $(shell $(CC) -dumpversion))
endif
ifeq ($(compile_name),clang)
compiler_version := $(shell $(CC) --version | awk 'NR==1{print $$3}')
endif
# ...
wflags.gcc.base := -Wall -Wextra
wflags.gcc.4.7 := -Wzero-as-null-pointer-constant
wflags.gcc.4.8 := $(wflags.gcc.4.7)
wflags.clang.base := -Wall -Wextra
wflags.clang.3.2 := -Weverything
CFLAGS += $(wflags.$(compiler_name).base) $(wflags.$(compiler_name).$(compiler_version))