2012-02-07 4 views
5

कभी कभी मैं इस तरह कोड देखें:क्यों टिप्पणी पैरामीटर नाम के बजाय उसे छोड़ यह है के रूप में

LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 

क्यों टिप्पणी पैरामीटर नाम के बजाय उसे के रूप में यह है छोड़?

+1

शायद कोड पर कब्जा करने वाले व्यक्ति को पता है कि कोड नाम लिखने वाले पैरामीटर नाम अनिवार्य नहीं हैं, जबकि कोड लिखने वाले व्यक्ति को इस तथ्य से अवगत नहीं था। यह सिर्फ एक दूसरे की प्राथमिकता है। –

उत्तर

6

ऐसा करने का एक कारण यह है कि आप स्पष्ट रूप से अन्य प्रोग्रामर को पैरामीटर का उपयोग न करने के बारे में बताना चाहते हैं, लेकिन उन्हें अपने इरादे के विवरण के लिए टिप्पणियों में छोड़ दें। मुझे पता है कि यह अब समझ में नहीं आता है, लेकिन पढ़ें।

मैं एक अलग उदाहरण का उपयोग करेंगे:

class A 
{ 
public: 
    virtual void foo(int someProperty); 
}; 

class B : public A 
{ 
public: 
    virtual void foo(int /*someProperty*/); 
}; 

आप एक विशिष्ट मामले के लिए इस चाहते कहो जहां B::foo() कुछ अतिरिक्त सामान करना चाहते हैं, और तब पैरामीटर 0 साथ A::foo() कहते हैं। आपको एक ही फ़ंक्शन हस्ताक्षर रखना होगा, इसलिए बहुरूपता काम करती है, लेकिन B::foo() के अंदर, आप वास्तव में पैरामीटर का उपयोग नहीं कर रहे हैं। न ही आप इसे भविष्य में उपयोग करना चाहते हैं। यह मूल रूप से इरादे का एक बयान है, "इस विधि का तर्क कुछ प्रॉपर्टी पर निर्भर नहीं होना चाहिए"

B::foo(int/*someProperty*/) 
{ 
    //do some stuff 
    A::foo(0); 
} 
बाहर टिप्पणी की पैरामीटर नाम के साथ

, तुम सच में (जब तक आप कुछ hacking को नीचे लाने के लिए) का उपयोग नहीं कर सकते हैं।लेकिन टिप्पणी का नाम आपको A::foo() पर पैरामीटर के बारे में कुछ बताता है - A से इसकी 'कुछ प्रॉपर्टी'।

अब, मैं वाक्यविन्यास से सहमत नहीं हूं, लेकिन यह एक संभावित स्पष्टीकरण हो सकता है।

0

यदि बुलाया गया फ़ंक्शन (OnPaint आपके उदाहरण में) तर्कों का उपयोग नहीं करते हैं, तो कोडर तर्क नाम प्रदान न करके संकलित करते समय अप्रयुक्त तर्कों के बारे में चेतावनी संदेश से बच सकता है।

0

कुछ संकलक जब आप तर्क पर टिप्पणी करते हैं या इसे पहले स्थान पर नहीं देते हैं तो "अप्रयुक्त तर्क चेतावनी" जारी नहीं करेंगे। लेकिन निश्चित रूप से आपको सही हस्ताक्षर रखने के लिए प्रकार छोड़ना होगा।

3

मापदंडों वास्तव में आवश्यक नहीं हैं, तो आप उन्हें

आप उन्हें नाम नहीं है, तो पहली नजर में आप नहीं समझ सकते हैं क्यों वे पहली जगह में देखते हैं नाम के लिए जरूरत नहीं है।

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

टिप्पणियों के रूप में नाम छोड़ना दो दृष्टिकोणों के बीच एक मध्यम आधार है।

2

कि onPaint() की परिभाषा की शुरुआत मैंने देखा "unreferenced formal parameter" संकलक चेतावनी से बचने के लिए इस्तेमाल किया तर्क नाम टिप्पणी की है, तो (इन चेतावनियों केवल एक उच्च चेतावनी स्तर पर, दिखाई देगा माइक्रोसॉफ्ट compilers के लिए स्तर -W4)।

10

मुझे लगता है कि कुछ कंपाइलर्स हैं जो 'तर्क का उपयोग नहीं किया गया' चेतावनी जारी करते हैं, ठीक है, तर्कों का उपयोग नहीं किया गया था।

विशेष रूप से आपके द्वारा दिखाए गए संदेश जैसे हैंडलर फ़ंक्शंस में, कार्य करने के लिए तर्क अक्सर आवश्यक नहीं होते हैं। तो तर्क नाम नाम पर टिप्पणी करके, आप चेतावनियों से छुटकारा पा सकते हैं।

दूसरी तरफ, यदि आप बाद में कुछ तर्कों का उपयोग करना चाहते हैं, तो नामों के हाथों में उपयोगी होना उपयोगी है, इसलिए नामों को हटाने से कहीं अधिक टिप्पणी करना आसान है।

+0

कंपाइलर अभी भी उन चेतावनियों को उत्पन्न करते हैं जब/w4 – Stefan

+0

पर सेट ठीक है, मुझे यकीन नहीं था। ऐसा लगता है कि मैंने हमेशा अपने हालिया सी ++ परियोजनाओं में अपने सभी तर्कों का उपयोग किया :) – MartinStettner

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