2013-01-18 24 views
5

मैं समझने की कोशिश कर रहा हूं कि मुझे सी कोड में const का उपयोग कैसे करना चाहिए। सबसे पहले मैंने इसका उपयोग करने में परेशान नहीं किया, लेकिन फिर मैंने const के कुछ उदाहरण पूरे इस्तेमाल किए। क्या मुझे कोई प्रयास करना चाहिए और वापस जाना चाहिए और धार्मिक रूप से उचित चर const बनाना चाहिए? या मैं बस अपना समय कम कर दूंगा?मैं सी में कॉन्स कीवर्ड का सबसे अच्छा उपयोग कैसे करूं?

मुझे लगता है कि यह पढ़ना आसान बनाता है कि कौन से चर बदलने की उम्मीद है, विशेष रूप से फ़ंक्शन कॉल में, इंसानों और कंपाइलर दोनों के लिए। क्या मुझे कोई अन्य महत्वपूर्ण बिंदु याद आ रहा है?

+1

सब कुछ एक चर है। कॉन्स बस है, जैसा कि आप कहते हैं, एक संकेत है कि असाइन किए गए मान को बदला नहीं जाना चाहिए। लेकिन आप पॉइंटर्स के साथ परेशान हो सकते हैं और कंपाइलर की पीठ के पीछे उस मूल्य को बदलने के लिए क्या नहीं: http://stackoverflow.com/questions/3801557/can-we-change-the-value-of-a-constant-through-pointers –

+0

संबंधित : [मुझे कॉन्स शुद्धता पर बेचें] (http://stackoverflow.com/questions/136880/sell-me-on-const-correctness) (यह सी ++ है, लेकिन सी के लिए भी प्रासंगिक है)। – netcoder

+0

मैं उन अनुप्रयोगों पर वापस जाने से परेशान नहीं हूं जो काम करते हैं और आप के साथ किया जाता है। यदि आपके पास पुस्तकालय हैं, तो उन्हें 'const' का उपयोग करने में बुरा नहीं होगा। कुछ बिंदुओं पर आपको छोड़ देना होगा। उदाहरण के लिए 'const' और बहु-आयामी सरणी वास्तव में एक साथ काम करते हैं। – Shahbaz

उत्तर

5

constटाइप किया गया, #define मैक्रोज़ नहीं हैं।

const सी ब्लॉक द्वारा स्कॉप्ड किया गया है, #define किसी फ़ाइल पर लागू होता है।

const पैरामीटर पासिंग के साथ सबसे उपयोगी है। यदि आपको const पॉइंटर्स के साथ प्रोटोटाइप पर उपयोग किया जाता है, तो आप जानते हैं कि यह आपके सरणी या संरचना को पास करना सुरक्षित है क्योंकि फ़ंक्शन इसे परिवर्तित नहीं करेगा। नहीं const और यह कर सकते हैं।

strcpy() जैसी परिभाषा को देखें और आप देखेंगे कि मेरा क्या मतलब है। शुरुआत में प्रोटोटाइप कार्य करने के लिए "कॉन्स्ट-नेस" लागू करें। रेट्रो-फिटिंग const "बहुत काम" के रूप में इतना कठिन नहीं है (लेकिन अगर आपको घंटे तक भुगतान मिलता है तो ठीक है)।

भी विचार करें:

const char *s = "Hello World"; 
char *s = "Hello World"; 

जो सही है, और क्यों?

+0

तो आपके उदाहरण में मैं मानता हूं कि मैं पहली पंक्ति में 'हैलो वर्ल्ड "' भाग नहीं बदल सकता (लेकिन मैं किसी अन्य स्ट्रिंग को पूरी तरह से 'एस' बिंदु बना सकता हूं), क्या यह सही है? मैंने यहां और वहां भी नोटेशन देखा है, यह है कि कैसे तार (अर्थात्, 'char' के सरणी) को तत्काल किया जाना चाहिए? – c00kiemonster

+0

@ c00kiemonster: यदि सामग्री को संशोधित किया जा सकता है, तो इसे 'const' न बनाएं। लेकिन ऊपर दिए गए उदाहरण में, 's * * स्थिर है और इसलिए संशोधित नहीं किया जा सकता है। –

+1

@ c00kiemonster: हाँ, 'कॉन्स' के साथ पहला उदाहरण सही है। दूसरा उदाहरण गलत है लेकिन दुर्भाग्य से आम है। यह केवल पढ़ने योग्य स्मृति (क्रैश!) को बदलने का प्रयास करेगा। बहुत समय पहले विजुअल स्टूडियो 5 ने इसे आवंटित किया, और कुछ "रोचक" प्रभाव दिए। – cdarke

1

const का उपयोग न केवल एक अच्छा अभ्यास है बल्कि कोड की पठनीयता और समझ में सुधार करता है और साथ ही कुछ सामान्य त्रुटियों को रोकने में मदद करता है। निश्चित रूप से जहां उचित हो वहां उपयोग करें।

6
How do I best use the const keyword in C? 

उपयोग const जब आप बनाने के लिए यह "रीड-ओनली" चाहते हैं। यह इतना आसान है :)