2015-02-26 10 views
5

मैं एक समारोह है कि इस तरह दिखता है है कि कुछ कोड को देख रहा हूँ?सी ++ में (शून्य) का क्या अर्थ है?</p> <pre><code>void f(A* a, B& b, C* c) { (void)a; (void)b; (void)c; } </code></pre> <p>वास्तव में क्या हर पंक्ति की शुरुआत करते हैं (शून्य) करता है:

+1

क्योंकि चर अप्रयुक्त हैं, तो आप चेतावनी से बचना चाहते हैं । – Maroun

+5

यह 'शून्य एफ (ए *, बी और, सी *) {} 'कहने का एक जटिल तरीका है। – juanchopanza

+0

आपको अधिक संदर्भ देना चाहिए। सॉफ्टवेयर क्या है जहां यह कोड प्रकट होता है? –

उत्तर

9

आपको क्या दिखाई वहाँ वास्तव में है सिर्फ एक नकली चर/पैरामीटर उपयोग को "चाल"।

उन पंक्तियों के बिना, एक पंडिताऊ संकलक चर नहीं किया जा रहा बारे में चेतावनी देने होंगे।

निर्माण का उपयोग (void)variablename; का परिणाम कोई निर्देश उत्पन्न नहीं होगा, लेकिन संकलक इसे उन चर के वैध "उपयोग" पर विचार करेगा।

+0

ठीक है, लेकिन फिर फ़ंक्शन का बिंदु क्या है? बेक्यूज यह सचमुच यह काम करता है सब कुछ करता है। –

+1

यह तब एक स्टब हो सकता है ... संगतता के लिए बनाया गया .. मुख्य कोड कॉल 'f' कार्य करता है। Xyz आर्किटेक्चर कहने के लिए, यह परिभाषित किया गया है, abcd आर्किटेक्चर के लिए इसे दिखाए गए अनुसार दबाया गया है। – anishsane

+1

@ जेस्पर एवरसनसन का कोई उपयोग नहीं है और एक अनुकूलन कंपाइलर पूरी तरह से इसे पूरी तरह से बाहर कर देगा (यानी इसके लिए कोई कोड उत्पन्न नहीं करता है)। यह शायद कुछ लागू करने या कुछ विरासत चीज़ के लिए प्लेसहोल्डर है। – Mario

-3

जब भी हम सी ++ में एक समारोह लिख रहे हैं, हम, समारोह के प्रोटोटाइप का पालन करना यानी

प्रकार का नाम (parameter1, parameter2, ...) {} बयान

यहाँ type- प्रकार के लिए खड़ा है मूल्य यह

  1. एक रिटर्न प्रकार का शून्य आपको उस फ़ंक्शन को परिभाषित करने की अनुमति देता है जो मूल्य वापस नहीं करता है। ध्यान दें कि यह 0 लौटने जैसा नहीं है। 0 का मान प्रकार पूर्णांक, फ्लोट, डबल, आदि है; यह एक शून्य नहीं है। (अन्य भाषाओं में, कोई रिटर्न वैल्यू वाले फ़ंक्शन को "सबराउटिन" या "प्रक्रिया" कहा जा सकता है, जबकि "फ़ंक्शन" हमेशा कुछ देता है। सी/सी ++ में, उन्हें सभी फ़ंक्शंस कहा जाता है।) लौटने का मतलब है कुछ भी नहीं ।

  2. शून्य के लिए एक सूचक एक सामान्य सूचक है जिसका उपयोग तब किया जा सकता है जब स्थान पर डेटा का प्रकार अज्ञात हो। तो आप वास्तव में वहां मौजूद चीज़ों को जानने के बिना स्मृति में किसी पते को संदर्भित करने के लिए एक प्रकार का शून्य * का उपयोग कर सकते हैं।

+3

ओपी यहां क्या नहीं पूछ रहा है। – anishsane

2

मुझे कम से कम दो पुनरावृत्ति दिखाई देती है। पहला यह संकलक की चेतावनियों से बचने के लिए है कि चर परिभाषित किया गया है लेकिन फ़ंक्शन के शरीर में उपयोग नहीं किया जाता है।

दूसरा यह है कि यह बहुत पुराना कोड है और कभी-कभी प्रोग्रामर अभिव्यक्ति के परिणाम का उपयोग नहीं होने पर अभिव्यक्ति से पहले रद्द करने के लिए कास्टिंग लिखते हैं। इससे संकलक को उत्पन्न ऑब्जेक्ट कोड अनुकूलित करने में मदद मिली।

+0

दूसरा अनुच्छेद: यह बहुत पुराना कोड नहीं है। यहां तक ​​कि सबसे हालिया कंपाइलर संस्करण (उदा। जीसीसी) शिकायत करेंगे यदि आप पैडेंटिक चेतावनियां सक्षम करते हैं और 'void' को कास्ट किए बिना कुछ कार्यों के रिटर्न कोड का उपयोग नहीं करते हैं। यद्यपि ईमानदार होने के बावजूद, दूसरा उपयोग ऊपर दिए गए कोड में मौजूद नहीं है, जो कि किसी भी पैरामीटर फ़ंक्शन पॉइंटर के मामले में एक भ्रामक कथन हो सकता है। – Mario

3

यह बस एक kludge संकलक चेतावनी से बचने के लिए है। उदाहरण के लिए, कि कोड जब जीसीसी -Wall -Wextra साथ संकलित करता है, तो kludge नहीं किया जाता है उत्सर्जित करेगा

warning: unused parameter ‘a’ [-Wunused-parameter] 
warning: unused parameter ‘b’ [-Wunused-parameter] 
warning: unused parameter ‘c’ [-Wunused-parameter] 

। हालांकि इसे हासिल करने के लिए क्लीनर दिखने के तरीके हैं। आप पैरामीटर नाम छोड़ सकता है:

void f(A*, B&, C*) { 
} 

एक जीसीसी-specifc और कुछ हद तक वर्बोज़ विकल्प प्रत्येक अप्रयुक्त पैरामीटर पर unused विशेषता का उपयोग करने के लिए है:

void f(A* a __attribute__((unused)), B& b, C* c) { 
} 
+1

लाइनों से छुटकारा पाने और चेतावनी से बचने का एक और तरीका, पैरामीटर से नाम हटा दें और सब ठीक है: 'शून्य एफ (ए *, बी और सी *) {} '<- शिकायत करने के लिए कोई चर नहीं। –

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