से उद्धरित,
सी में, दो अलग-अलग नाम स्थान हैं: एक नेमस्पेस
नाम.c
$ cat का नाम। सी # शामिल & lt; stdio.h & gt; Typedef लंबे लंबे लंबे 2; Int long2 () {वापसी 4; } Int main () {printf ("हैलो, विश्व!"); वापसी 0; } $ Gcc name.c -o name name.c: 4: त्रुटि: 'long2' को विभिन्न नामों के रूप में पुनः नामित किया गया c: 3: त्रुटि: 'long2' की पिछली घोषणा यहां थी $
नाम 2 सी
$ बिल्ली name2.c # शामिल करें & lt; stdio.h & gt; इंट चार () {वापसी 4; } संरचना डमी {int सदस्य; }; Int main () {struct डमी चार; } $ Gcc name2.c -o name2 $
मैं सी नामस्थान संघर्ष को समझने की कोशिश कर रहा हूं।
-
पहले मामले में, क्यों वहाँ एक संघर्ष? क्या कार्य भी टाइपेडफेस नामस्थान से संबंधित है?
-
दूसरे मामले में, कोई संघर्ष क्यों नहीं है? फ़ंक्शन और वेरिएबल दोनों का नाम चार है। कंपाइलर ऐसा क्यों करता है?
और <4>
का समाधान कैसे किया जाता है?
सी में पहचानकर्ताओं के लिए चार अलग नाम रिक्त स्थान हैं:
- लेबल नाम (
goto
प्रकार)। - टैग (संरचनाओं के नाम
- संरचनाओं और यूनियनों के सदस्य (ये प्रत्येक संरचना / संघ के लिए एक अलग नामस्थान है)।
- अन्य सभी पहचानकर्ता (फ़ंक्शन नाम, ऑब्जेक्ट नाम, प्रकार (डीईएफ)
भी देखें C99 6.2.3।
तो आपके दो प्रश्नों के उत्तर दिए जा सकते हैं:
- हां, फ़ंक्शन नाम और टाइप किए गए नाम समान नाम स्थान साझा करते हैं।
- कोई संघर्ष नहीं है, क्योंकि संकलक स्कोप नियमों का उपयोग करेगा (फ़ंक्शन या ऑब्जेक्ट नामों के लिए) मुख्य में पहचानकर्ता को छाया वैश्विक फ़ंक्शन नाम से कहा जाता है, जो कुछ आपके कंपाइलर आपको चेतावनी देगा यदि आप चेतावनी के स्तर को उच्च स्तर पर सेट करते हैं।
Comments
Post a Comment