हमारे स्थिर विश्लेषण उपकरण एक "वापसी प्रकार पर बेकार प्रकार क्वालीफायर" के बारे में शिकायत हम इस तरह के रूप में हेडर फाइल में प्रोटोटाइप है जब:स्पष्टता के लिए वापसी प्रकारों पर बेकार प्रकार क्वालीफायर का उपयोग किया जाना चाहिए?
const int foo();
हम इसे इस तरह से परिभाषित क्योंकि समारोह एक निरंतर कि कभी नहीं होगा परिवर्तन लौट रहा है , यह सोचकर कि एपीआई const
जगह के साथ स्पष्ट लग रहा था।
मुझे लगता है कि यह स्पष्ट रूप से स्पष्ट रूप से शून्य के लिए वैश्विक चर प्रारंभ करने के समान है, भले ही सी मानक पहले से ही बताता है कि स्पष्ट रूप से प्रारंभ नहीं होने पर सभी ग्लोबल्स शून्य पर प्रारंभ किए जाएंगे। दिन के अंत में, यह वास्तव में कोई फर्क नहीं पड़ता। (लेकिन स्थिर विश्लेषण उपकरण इसके बारे में शिकायत नहीं करता है।)
मेरा सवाल है, क्या कोई कारण है कि इससे कोई समस्या हो सकती है? क्या हमें उपकरण द्वारा उत्पन्न त्रुटियों को अनदेखा करना चाहिए, या क्या हमें कम स्पष्ट और सुसंगत एपीआई की संभावित लागत पर उपकरण को शांत करना चाहिए? (यह अन्य const char*
स्थिरांक देता है जिसमें उपकरण में कोई समस्या नहीं है।)
सहमत हुए। एक कॉन्स रिटर्न प्रकार पर मेरी तत्काल प्रतिक्रिया यह मानना है कि वापसी एक साझा बफर को संदर्भ/सूचक है जिसे बदला नहीं जाना चाहिए। मेरा मानसिक मॉडल यह है कि कॉन्स कंटेनर पर लागू होता है (उदा। चर), सामग्री नहीं। उदाहरण के लिए "कॉन्स char *" में, कॉन्स पॉइंट-टू स्ट्रिंग पर लागू होता है, जबकि यदि आपके पास "const int i = 5" है, तो आप अभी भी अभिव्यक्ति में "i + 1" लिख सकते हैं - आप इसके साथ काम कर सकते हैं जब तक आप चर बदलने की कोशिश नहीं करते हैं तब तक मूल्य। एक साधारण int वापसी के साथ, आपके पास वास्तव में एक कंटेनर नहीं है - केवल एक मान। – Steve314
मुझे लगता है कि लोग 'const' कीवर्ड के अजीब व्यवहार के कारण भ्रमित हो जाते हैं। मेरा मतलब है कि 'कॉन्स char * c' और' char const * c' एक ही चीज़ हैं। यदि पूर्व वाक्यविन्यास कानूनी नहीं थे, तो चीजें बहुत कम उलझन में होंगी। हमारे पास केवल 'char const * c' और 'char * const c' होगा और सभी को पता चलेगा कि क्या हो रहा है। शायद मैं इसके बारे में बहुत सोच रहा हूँ। –
ठीक है, मुझे विश्वास है। जीसीसी चेतावनी को इंगित करने के लिए धन्यवाद। मेरी इच्छा है कि यह चेतावनी के बजाय एक त्रुटि होगी, इसलिए इस तरह के ग्रे क्षेत्र नहीं आते हैं। – mpontillo