2011-08-18 18 views
6

gcc 4.6.1 में सी स्रोत कोड संकलित करते समय मुझे निम्नलिखित चेतावनी मिल रही है।चेतावनी: परिवर्तनीय सेट लेकिन उपयोग नहीं किया गया [-उन्यूज्ड-लेकिन-सेट-वेरिएबल]

warning: variable set but not used [-Wunused-but-set-variable] 

मैं इस लिंक Wunused में संदर्भित लेकिन वास्तव में मिल सकता है क्या इस warning.Would किसी को भी और अधिक विवरण में मुझे बताओ कि यह चेतावनी खड़ी कर रहा है और कैसे हम इसे से छुटकारा पा सकते खड़ी कर रहा है?

[संपादित करें] मेरे पास कोड का एक निम्न स्निपेट है। संकलन उपर्युक्त चेतावनी दिखाता है। क्या आप कृपया मुझे सुझाव दे सकते हैं कि इसे कैसे ठीक किया जा सकता है?

test_function(){ 
    BOOL BoolTest; 
    BoolTest = test_fucntion2(); 

    #ifdef CHECK 
    if (!BoolTest) { 
    misc_StartErrorReport(); 
    misc_ErrorReport("\n test_function2: Input not indexed.\n"); 
    misc_FinishErrorReport(); 
      } 
    #endif 
    // 
    BoolTest is no more used below it. 
    // } 

उत्तर

5

आप घोषणा और BoolTest की initialisation आसपास पूर्वप्रक्रमक गार्ड शामिल करने की जरूरत:

test_function() 
{ 
#ifdef CHECK 
    BOOL BoolTest = test_function2(); 
#else 
    test_function2(); 
#endif 


#ifdef CHECK 
    if (!BoolTest) { 
     misc_StartErrorReport(); 
     misc_ErrorReport("\n test_function2: Input not indexed.\n"); 
     misc_FinishErrorReport(); 
    } 
#endif 

(यह मानता है कि आप अभी भी कॉल करने के लिए, test_function2() भी CHECK अगर परिभाषित नहीं है शायद इसके दुष्प्रभाव के लिए चाहते हैं - यदि नहीं, तो आपको #else सेक्शन की आवश्यकता नहीं है और आप दो #ifdef ब्लॉक को एक में जोड़ सकते हैं)।

5

आप एक चर सेट कर रहे हैं लेकिन फिर इसका उपयोग नहीं कर रहे हैं। उदाहरण के लिए:

int foo = some_expression; 
//...code which does not use foo 

आप इसे हटा सकते हैं।

+0

के बीच कोई अंतर नहीं है लेकिन मैं इसका उपयोग कर रहा हूं! मुझे नहीं लगता कि मुझे यह त्रुटि क्यों दिखाई दे रही है। अगर मैं परिभाषा को हटा देता हूं, तो यह शिकायत करता है कि मैं इसे परिभाषित किए बिना चर का उपयोग कर रहा हूं। अगर मैं परिभाषा शामिल करता हूं, तो यह कहता है कि मैं इसका उपयोग नहीं कर रहा हूं। इस चेतावनी का कारण क्या हो सकता है? – endolith

+2

@endolith: ओह, कभी नहीं। मैं * इसका उपयोग नहीं कर रहा हूं। मतलब मैं केवल इसे (कई स्थानों पर) सेट कर रहा हूं और कभी भी मूल्य का परीक्षण नहीं कर रहा हूं, क्योंकि मैंने अभी तक यह हिस्सा नहीं लिखा है। ओह। – endolith

4

एक चर सेट करना यह एक मूल्य (शायद परोक्ष)

int main(void) { 
    int local1, local2; 
    local1 = 0; /* local1 set to 0 */ 
    local2 = 0; /* local2 set to 0 */ 
    return 0; 
} 

उपरोक्त कार्यक्रम में बताए है, दोनों चर मान पर सेट कर रहे थे, लेकिन वे इस्तेमाल नहीं किया गया। अगर मैं

int local2 = local1; 

साथ दूसरी पंक्ति की जगह अब मैं local1 चर का इस्तेमाल किया है - और चेतावनी केवल 1.

चेतावनी से छुटकारा पाने के होना चाहिए, अपने कोड से काम को हटा दें। यह बदले में अन्य चेतावनियां बना सकता है ... :)

2

इसका मतलब है कि आप एक चर के लिए एक मान असाइन करते हैं, लेकिन फिर आप उस कोड को बाद में अपने कोड में कभी नहीं पढ़ते (इसलिए कचरा, "सेट लेकिन उपयोग नहीं किया जाता है")।

int useful = 10; 
int useless = 3; 
if (useful) { 
    //Do stuff 
} 

सूचना है कि आप दोनों useful और useless मान देना, लेकिन आप केवल useful में मूल्य पढ़ें: उदाहरण के लिए। आमतौर पर, जब मुझे यह संदेश मिलता है तो इसका मतलब है कि मैं एक चर के बारे में भूल गया हूं या एक ऐसे बयान को इनलाइन करने का एक तरीका मिला है जिसे अब उस चर की आवश्यकता नहीं है।

0

आपने बुलेटटेस्ट का उपयोग नहीं किया है। आप देख सकते हैं कि आपके कोड और

test_function(){ 
#ifdef CHECK 
if (!test_fucntion2()) { 
संबंधित मुद्दे

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