2009-08-27 11 views
7

लोगों के अधिक बढ़िया व्यवहार, मुझे वास्तव में -Wshadow विकल्प पसंद है क्योंकि यह कोड के कुछ संभावित समस्याग्रस्त टुकड़ों को खोजने में मदद करता है। मैं इसे वास्तव में एक बड़ी परियोजना में उपयोग करना चाहता हूं लेकिन मैं इसे सख्त होने के बाद से नहीं कर सकता।जीसीसी -Wshadow विकल्प

struct Foo 
{ 
    Foo(int info) : info_(info) {} //shadow warning is here 
    void info(){ ... } 
    int info_; 
}; 

gcc निर्माता जो मेरे लिए एक उपयोगी चेतावनी है ... ठीक है, वास्तव में नहीं के बारे में "पूर्णांक जानकारी" चर छाया "शून्य की जानकारी" विधि एक चेतावनी फेंकता है: उदाहरण के लिए यह निम्नलिखित मामले के लिए एक चेतावनी फेंकता ।

क्या मैं सच के बारे में परवाह निम्नलिखित जैसे मामलों है:

int i = 0; 
    for(int j=0;j<10;++j) 
    { 
    int i = j; //local scope variable "int i" shadows outer scope variable 
    ++i; 
    } 

यह gcc बनाने के लिए केवल इन मामलों के बारे में चेतावनी संभव है?

+2

वीसी में आप विशिष्ट चेतावनियों को दबाने के लिए '# प्रगमा' निर्देशों का उपयोग कर सकते हैं, स्पष्ट रूप से जीसीसी में आपके पास '-W * 'विकल्प की पर्याप्तता है, लेकिन अब तक मैंने देखा है कि इनमें से कोई भी" जैसे ' Wshadow' लेकिन केवल चर के लिए "। तो मुझे लगता है कि आप वहां भाग्य से बाहर हैं। – Joey

+0

लूप में चर "छाया" भी एक वांछनीय विशेषता के रूप में देखा जाता है, इसके बारे में चेतावनी देने के लिए कुछ नहीं। –

+0

यह दुखद है कि "-Wshadow लेकिन केवल चर के लिए" उपलब्ध नहीं है :( – pachanga

उत्तर

10

बाहरी पुस्तकालयों के लिए आप -I के बजाय -isystem के साथ अपना शामिल पथ निर्दिष्ट करने का प्रयास कर सकते हैं, इससे जीसीसी इस समय अधिकांश में चेतावनियों की रिपोर्टिंग बंद कर देगी।

#pragma GCC diagnostic ignored "-Wshadow"

मामलों कोड पुनर्रचना या कर grep चाल पीटर उल्लेख के बाकी समय में होने लगते हैं:

जब चेतावनी केवल कुछ सीमित मामलों में पॉप अप होता है उसे अपने साथ काम कर सकते हैं केवल विकल्प

+0

ओह, बहुत धन्यवाद, मैं "-i" विकल्प और #pragma पर एक नज़र डालेंगे – pachanga

3

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

सबसे अच्छी सलाह जो मैं आपको दे सकता हूं वह उन सभी चेतावनियों को हटाने पर काम करना है, भले ही आप उनकी परवाह न करें। आम तौर पर सदस्य कार्यों को छिपाने वाले पैरामीटर नामों का उपयोग न करने के लिए बेहतर है।

यह वह दृष्टिकोण है जिसे हमने नई चेतावनियां सक्षम करने और अन्य स्थिर जांचकर्ताओं को पेश करने में किया है। मेरी राय में दर्द समग्र रूप से लाभ के लायक है।

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

एक अन्य वास्तव में हैकी विकल्प ज्ञात "ठीक" अपवादों की एक सूची बनाने के लिए है, और उन्हें संकलक आउटपुट से बाहर grep है। आप जीसीसी के लिए एक रैपर बना सकते हैं, जो सिर्फ उन चेतावनियों को निकालेगा जिन्हें आप देखना नहीं चाहते हैं। हालांकि मैं इसकी अनुशंसा नहीं करता हूं, शायद आपके कोड बेस को ठीक करना आसान हो सकता है!

+1

हम कई बाहरी पुस्तकालयों (जैसे बूस्ट) का उपयोग कर रहे हैं और उन्हें पैचिंग एक विकल्प नहीं है .... – pachanga

+1

यदि आप बाहरी कोड बना रहे हैं, तो आपका सर्वश्रेष्ठ पसंद उस निर्देशिका में आपके संकलन झंडे को बदलना है जिसमें केवल (बाहरी) बाहरी कोड शामिल है। आप या तो आपको समस्याएं उत्पन्न करने वाली चेतावनी को हटा सकते हैं, या चेतावनियों को त्रुटियों से रोक सकते हैं। – Peter

+0

क्या आप कृपया एक लिंक दे सकते हैं या इसका वर्णन कैसे कर सकते हैं? क्या होगा यदि पुस्तकालय "केवल शीर्षलेख" है? – pachanga

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