2012-01-18 10 views
6

प्रश्न का पालन करें: g++ does not show a 'unused' warningअप्रयुक्त वस्तुओं (गैर-आदिम मूल्यों) को ढूंढना

मैं पूरी तरह से समझता हूं कि क्यों g ++ इन चर के बारे में चेतावनी नहीं देता है, लेकिन मैं इसे किसी भी तरह से ढूंढना चाहता हूं। जिस कोड पर मैं काम कर रहा हूं, उनमें से कोई भी विशेष मामला नहीं है, इसलिए एक FloatArray x; लगभग निश्चित रूप से बाएं ओवर है।

यहां तक ​​कि यदि मुझे अलग-अलग वर्गों को चिह्नित करना है (जैसे अप्रयुक्त फ़्लोटएरे-ऑब्जेक्ट्स के लिए चेतावनी) यह बहुत उपयोगी होगा। मैं क्या कर सकता हूँ?

+0

क्या यह वास्तव में एक समस्या है? कल्पना करना मुश्किल है, क्योंकि अधिकांश कंपाइलर्स संभवतः वस्तुओं को कुछ भी नहीं रेखांकित करेंगे और फिर उनका उपयोग नहीं करेंगे, है ना? –

+0

लेकिन संकलक इस बारे में चेतावनी देते हैं जब वे निर्धारित करते हैं कि चर "ऑप्टिमाइज़ेशन से पहले" उपयोग नहीं किया जाता है, इसके बाद नहीं। वह एक दुःस्वप्न होगा! – rodrigo

उत्तर

1

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

http://gcc.gnu.org/wiki/MELT%20tutorial

+0

धन्यवाद, लेकिन मुझे "जल्दी" के बारे में निश्चित नहीं है। मैं सूचीबद्ध पूर्वापेक्षाएँ पूरी नहीं करता (यहां तक ​​कि करीब भी नहीं, कोई कह सकता है)। मैं यह देखने की कोशिश करूंगा कि क्या मैं किसी ऐसे व्यक्ति को ढूंढ सकता हूं जिसने एमईएलटी में पहले ही ऐसा किया है। –

-1

मैं अगर मैं प्रश्न में कुछ याद कर रहा हूँ, लेकिन जीसीसी/जी ++ विकल्प है जो आप जो चेतावनी आप चाहते हैं और जो तुम नहीं निर्दिष्ट करने देते है यकीन नहीं है। तो बस -उन्यूज्ड-वेरिएबल को बस सक्षम किया गया।

यहाँ अधिक जानकारी के लिए देखें: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

इसके अलावा, -Wall पर यह और कई और अधिक उपयोगी चेतावनी हो जाएगा।

+2

अप्रयुक्त-परिवर्तनीय चेतावनी केवल प्राइमेटिव के लिए काम करती है, सी ++ वर्ग नहीं, क्योंकि कन्स्ट्रक्टर/विनाशक का वांछित प्रभाव हो सकता है। – greg

+1

क्षमा करें, लेकिन -1 क्योंकि मैं वास्तव में इस प्रश्न से लिंक करता हूं जो बताता है कि यह क्यों काम नहीं करेगा। –

+0

पर्याप्त मेला। एक दिन, मैं पढ़ना सीखूंगा। – Liam

3

ठीक है, जीसीसी के साथ निम्नलिखित कोड आप चाहते हैं के रूप में चेतावनी दी है:

struct Foo 
{ 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //warning: unused variable 'b' 
} 

लेकिन अगर आप फू या बार struct, यहां तक ​​कि एक छोटी सी एक के लिए एक निर्माता/नाशक जोड़ते हैं तो उसे चेतावनी दी नहीं होंगे।

struct Foo 
{ 
#ifndef TEST_UNUSED 
    Foo() {} 
#endif 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //warning! 
} 

अब अतिरिक्त अप्रयुक्त चर के लिए जाँच करने के लिए g++ -DTEST_UNUSED साथ संकलन:

struct Foo 
{ 
    Foo() {} 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //no warning! It calls Foo::Foo() into b.f 
} 

तो चेतावनी हासिल करने के लिए सबसे आसान तरीका है सभी प्रासंगिक निर्माणकर्ता और विनाशकर्ता सशर्त संकलित करने के लिए है।

मेरा सबसे अच्छा विचार नहीं है, लेकिन यह काम करता है।

+2

यह उपयोगकर्ता द्वारा निर्मित वस्तुओं के लिए काम कर सकता है, लेकिन भाषा (स्ट्रिंग, एसटीएल कंटेनर इत्यादि) द्वारा प्रदान किए गए लोगों के लिए नहीं। – greg

+0

यह शायद मुझे परियोजना में अप्रयुक्त वस्तुओं की एक बड़ी मात्रा में खोजने देगा, इसलिए मैं आपको बक्षीस दूंगा। –

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