2010-05-22 16 views
16

मैं फिलहाल जीसीसी मैनुअल पढ़ रहा हूं, विशेष रूप से चेतावनी/त्रुटि झंडे के बारे में हिस्सा। -वेक्स्ट्रा ध्वज के बारे में हिस्सा पढ़ने के बाद, मुझे आश्चर्य है कि यह बिल्कुल उपयोगी है या नहीं। ऐसा लगता है कि यह ऐसी चीजों के बारे में शिकायत करता है जो अपेक्षाकृत या स्वाद का विषय प्रतीत होता है। मैं जीसीसी के साथ अनुभव नहीं कर रहा हूं, मैं केवल समय-समय पर विश्वविद्यालय में कुछ छोटी परियोजनाओं के लिए इसका उपयोग करता हूं, इसलिए सभी अनुभवी सी/सी ++ (या जो भी भाषा आप जीसीसी का उपयोग करते हैं) के लिए, वाक्स्ट्रा के साथ क्या सौदा है?-Wextra वास्तव में कितना उपयोगी है?

उत्तर

22

-Wextra, अन्य सामान बीच -Wtype-limits का अर्थ है:

चेतावनी दें यदि एक तुलना हमेशा डेटा प्रकार की सीमित रेंज की वजह से सच है या हमेशा गलत है, लेकिन निरंतर भाव के लिए सचेत न करें । उदाहरण के लिए, चेतावनी दें कि एक हस्ताक्षरित चर शून्य के मुकाबले शून्य के मुकाबले '<' या '> =' है। यह चेतावनी -Wextra द्वारा भी सक्षम है।

मुझे यह वास्तव में उपयोगी लगता है।

7

मैं शोर को हटाने के लिए आमतौर पर -Wno-sign-compare और -Wno-unused-parameter जोड़ता हूं।

गर्भित -Wuninitialized (-O2 विकल्प के साथ) बहुत मेरे लिए उपयोगी है, लेकिन अपने कोड आधार के लिए शुरू में इसे जोड़ने के लिए थोड़ा कठिन हो सकता है। एक तरीका यह से निपटने के लिए दो मैक्रो को जोड़ने के लिए है (जो थोड़ा अजीब लग रही है: बराबर के चिह्न जानबूझकर है):

#define ELIMINATE_GCC_WARNING = 0 // used to remove nuisance warnings 
#define UNCHECKED_GCC_WARNING = 0 // not yet verified 

तो फिर तुम जल्दी से जीसीसी चेतावनी को खत्म करने और जैसे का उपयोग करके एक साफ संकलन प्राप्त कर सकते हैं:

int foo UNCHECKED_GCC_WARNING; 

फिर वैकल्पिक विकल्प के रूप में वापस जाएं और इन परिवर्धनों की जांच करें, और उन्हें एक-एक करके ELIMINATE_GCC_WARNING में बदलें। यह धीमा हो सकता है। लेकिन अगर आपको कुछ मौजूदा बग नहीं मिली तो मुझे आश्चर्य होगा।

+1

मुझे '-Wno-unused-पैरामीटर 'मदद मिलती है, खासकर जब पुराने स्रोत कोड वर्षों से बदलते हैं, कभी-कभी मूल्यों को नेस्टेड फ़ंक्शंस को पारित किया जाता है जिसका उपयोग भी नहीं किया जाता है। सुझाव UNUSED परिभाषित करें। '#define अप्रयुक्त (एक्स) UNUSED_ ## x __attribute __ ((__ अप्रयुक्त __))' तो फिर तुम इस ... 'शून्य समारोह की तरह तर्क लपेट कर सकते हैं (एक int, int अप्रयुक्त (ख)) {... } ' यह भी अच्छा है कि यदि बाद में जीसीसी पर तर्क का उपयोग करने की आवश्यकता है तो यह UNUSED() विशेषता को हटाए बिना ऐसा नहीं होने देगा। – ideasman42

2

कृपया http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html देखें।

इसलिए यह केवल 'हमेशा सत्य' तुलना (-Wignign-तुलना) के लिए उपयोगी नहीं है बल्कि अन्य संकलन समस्याओं की पहचान भी करता है। मुझे यह अक्सर उपयोगी लगता है।

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