2010-07-07 30 views
42

मैं अपने .h फ़ाइल में परिभाषित करने के लिए मेरी .h फ़ाइल में एक एनएसएसटींग स्थिरता की कोशिश कर रहा हूं। मैं समझता हूं कि
extern NSString * const variableName; .h और
NSString * const variableName = @"variableValue"; ऐसा करने का तरीका है। सी ट्यूटोरियल की जांच मैं देखता हूं कि const को चर परिभाषाओं से पहले जाना चाहिए। मेरा सवाल यह है कि इसे .m और const NSString * variableName = @"variableValue"; में .m में extern const NSString * variableName; के रूप में घोषित नहीं किया गया है। मुझे पता है कि यह काम नहीं करता है क्योंकि मुझे कंपाइलर चेतावनियों का सामना करना पड़ता है जो कहते हैं कि 'विधिनाम का उत्तीर्ण तर्क 1: पॉइंटर लक्ष्य प्रकार से क्वालीफायर को छोड़ दें'। इसका क्या मतलब है?उद्देश्य सी कॉन्स एनएसएसटींग * बनाम एनएसएसटींग * कॉन्स

उत्तर

53

यह वही नहीं है। कॉन्स संशोधक मूल्य पर, या सूचक के लिए सूचक पर लागू किया जा सकता है।

int * const 

एक निरंतर सूचक (संशोधन करने योग्य नहीं) एक पूर्णांक के लिए (अपने मूल्य संशोधित किया जा सकता)

const int * 

एक निरंतर पूर्णांक के लिए एक परिवर्तनीय सूचक (अपने मूल्य को संशोधित नहीं किया जा सकता है)

तो आप कल्पना कर सकते हैं:

const int * const; 
+25

उस पर विस्तार करने के लिए, यदि आप किसी पॉइंटर से निपट नहीं रहे हैं, तो 'const int' और 'int const' बिल्कुल वही हैं। 'एनएसएसटींगिंग पहले से ही अपरिवर्तनीय है, इसलिए केवल कोने को पॉइंटर पर लागू करने की आवश्यकता है (जो थोड़ा उलझन में हो सकता है क्योंकि ऑब्जेक्टिव-सी ऑब्जेक्ट्स हमेशा पॉइंटर्स के माध्यम से उपयोग किए जाते हैं)। – Wevah

+1

@Macmade आपने एनएसएसटींग के संदर्भ में यह क्यों नहीं बताया क्योंकि संकेतक पॉइंटर के साथ अलग है? – jpswain

+1

उस पर विस्तार करने के लिए, 'const int *' और 'int const *' समान हैं, लेकिन 'int * const' अलग है। – user102008

5

लगातार सूचक लगातार करने के लिए एक सूचक नहीं है। लगातार सूचक का मतलब है कि सूचक स्थिर है। जैसे स्थिर सूचक int * const ptr2; इंगित करता है कि ptr2 एक सूचक है जो स्थिर है। इसका मतलब है कि ptr2 किसी अन्य पूर्णांक को इंगित करने के लिए नहीं बनाया जा सकता है। हालांकि, ptr2 द्वारा इंगित पूर्णांक बदला जा सकता है।

जबकि निरंतर const int * ptr1; पर सूचक इंगित करता है कि ptr1 एक सूचक है जो निरंतर पूर्णांक को इंगित करता है। पूर्णांक स्थिर है और बदला नहीं जा सकता है। हालांकि, सूचकांक ptr1 कुछ अन्य पूर्णांक को इंगित करने के लिए बनाया जा सकता है।

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