2012-06-18 19 views
6

संभव डुप्लिकेट:
What does “(void) new” mean in C++?कथन क्या है "(शून्य) startGuardBegin;" क्या करें?

मैं सी से परिचित नहीं हूँ ++ और मैं सही विधि हस्ताक्षर के बाद लाइन समझ में नहीं आता:

int EAN13Reader::decodeMiddle(Ref<BitArray> row, 
     int startGuardBegin, 
     int startGuardEnd, 
     std::string& resultString) 
{ 
    (void)startGuardBegin; 
    ... 
} 

क्या (void)startGuardBegin; है ? एक विधि invokation?

+0

@ थिफमास्टर एक डुप्लिकेट नहीं है, 'शून्य' का थोड़ा अलग उपयोग: मूल्य बनाम मार्किंग वैरिएबल को अप्रयुक्त के रूप में हटाएं। –

+1

डुप्लिकेट नहीं। –

उत्तर

4

यह संकलक कि तर्क अप्रयुक्त है बताता है और इस तरह यह एक "अप्रयुक्त तर्क" चेतावनी नहीं दिखाना चाहिए।

ऐसे जीसीसी के रूप में compilers आम तौर पर संकेत दिया यह करने के लिए अन्य तरीकों (int startGuardBegin __attribute__ ((unused))), आमतौर पर समारोह शीर्षक में किसी भी तरह, (void) करने के लिए इसे कास्टिंग किसी भी संकलक विशिष्ट सुविधाओं पर निर्भर नहीं करता है है।

3

यह कुछ भी नहीं करता है।

इसके बजाय, यह पाठक को निर्दिष्ट करता है और किसी भी स्थिर विश्लेषण उपकरण को startGuardBegin फ़ंक्शन में उपयोग नहीं किया जाता है और यह ठीक और अपेक्षित है।

स्टेटिक विश्लेषण उपकरणों अगर एक पैरामीटर एक समारोह में अप्रयुक्त है चेतावनी देगा क्योंकि यह एक संभव बग इंगित करता है। यदि पैरामीटर को हस्ताक्षर से हटाया नहीं जा सकता है (यदि इसे डीबग कोड में उपयोग किया जाता है, या संगतता या भविष्य के व्यवहार के लिए आवश्यक है) तो पैरामीटर का उपयोग नो-इफेक्ट स्टेटमेंट में चेतावनी को रोक देगा। हालांकि, बस इसे एक कथन startGuardBegin; में उपयोग करने से एक और चेतावनी ट्रिगर होगी (जैसे मान को त्याग दिया जाता है), इसलिए इसे void पर कास्ट करना इससे रोकता है।

+0

असल में, ज्यादातर मामलों में यह संकलक है, कुछ अन्य स्थिर विश्लेषण उपकरण नहीं। – ThiefMaster

1

void में कास्ट करना अप्रयुक्त चर और न सहेजा गया वापसी मान या भाव के लिए संकलक चेतावनी को दबाने के लिए प्रयोग किया जाता है।

स्टैंडर्ड (2003) कहते हैं §5.2.9/4 कहते हैं में,

किसी भी अभिव्यक्ति स्पष्ट रूप से किया जा सकता है टाइप करने के लिए परिवर्तित "सीवी शून्य।" अभिव्यक्ति मूल्य खारिज है।

तो तुम लिख सकते हैं (C++ शैली तरीके से):

//suppressing unused variable warnings 
static_cast<void>(unusedVar); 

//suppressing return value warnings 
static_cast<void>(fn()); 

//suppressing unsaved expressions 
static_cast<void>(a + b * 10); 
static_cast<void>(x &&y || z);  
static_cast<void>(m | n + fn()); 

सभी रूपों मान्य हैं। मैं आमतौर पर इसे कम करता हूं:

//suppressing expressions 
(void)(unusedVar); 
(void)(fn()); 
(void)(x &&y || z); 

यह भी ठीक है।

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