2011-12-09 16 views
6

त्वरित प्रश्न:गणन स्कोप

अगर मैं की तरह enums है:

enum EnumA 
{ 
    stuffA = 0 
}; 
enum enumAA 
{ 
    stuffA = 1 
}; 

यहाँ क्या होता है जब आप stuffA का उल्लेख? मैंने सोचा था कि आप उन्हें EnumA.stuffA और EnumB.stuffA जैसे जावा में देखेंगे, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है।

किसी भी जानकारी के लिए धन्यवाद शीघ्र उत्तर के लिए

संपादित करें-धन्यवाद!

उत्तर

7

enums नया दायरा पेश नहीं करते हैं।

आपके उदाहरण में, enumstuffA नाम संघर्ष के कारण संकलित नहीं होगा।

नाम संघर्ष से बचने के लिए, enum के तत्वों को एक सामान्य उपसर्ग देने के लिए यह एक आम प्रथा है। विभिन्न उपसर्गों अलग enums के लिए इस्तेमाल किया जाएगा:

enum EnumA 
{ 
    EA_stuffA = 0 
}; 
enum EnumAA 
{ 
    EAA_stuffA = 1 
}; 
+0

तो अगर मैं उपरोक्त (संकीर्ण क्षेत्र) जैसी कुछ हासिल करना चाहता था, तो क्या संरचना मेरी एकमात्र/सर्वोत्तम शर्त होगी? – prelic

+0

आपको कुछ उपयोग करना होगा: 'enum enumA {enumA_stuffA = 0}; enum enumAA {enumAA_stuffA = 1}; ' –

5

गणन स्थिरांक वैश्विक नाम स्थान में हैं (अधिक सटीक, साधारण पहचानकर्ता नाम अंतरिक्ष, लेबल, टैग, और संरचना/संघ सदस्य नामस्थान के साथ विषम), तो आपको दूसरे stuffA पर एक संकलन त्रुटि मिलती है।

आप एक ही अनुवाद इकाई में एक ही गणना नाम (और दो बार निर्दिष्ट एक ही मान) के लिए दो अलग-अलग मानों का उपयोग नहीं कर सकते हैं।

1

जैसा कि बताया गया है, यह संकलित नहीं होगा क्योंकि stuffA को दो बार परिभाषित किया गया है। एनम मूल्यों को केवल गणना द्वारा संदर्भित किया जाता है (जो EnumA.stuffA की बजाय "stuffA" है)। आप उन्हें उन प्रकारों पर भी उपयोग कर सकते हैं जो enums (जैसे पूर्णांक) नहीं हैं। इनम्स को कभी-कभी इनट्स के साथ इस तरह इस्तेमाल किया जाता है, जिस तरह से एक # स्थिरांक निर्धारित करेगा।

+2

सी में, 'enum' स्थिरांक * मानक की परिभाषा के अनुसार * int' हैं। –

3

जैसा कि पहले से ही कहा गया है कि गणित स्थिरांक वास्तविक दायरे में अद्वितीय होना चाहिए जहां उन्हें परिभाषित किया गया है। लेकिन उनके साथ अन्य पहचानकर्ताओं के साथ उन्हें एक और दायरे में फिर से परिभाषित करने की अनुमति है। उदाहरण के लिए।

enum EnumA 
{ 
    stuffA = 0 
}; 

void func(void) { 
    enum enumAA 
    { 
    stuffA = 1 
    }; 
    // do something 
} 

ठीक होगा। लेकिन विभिन्न क्षेत्रों में ऐसी परिभाषाएं प्रायः डूब जाती हैं और अच्छी तरह से प्रलेखित की जानी चाहिए, अन्यथा आप जल्दी से खुद को और दूसरों को खो देंगे।

+3

+1 और सौभाग्य से जीसीसी '-Wshadow' के साथ' चेतावनी देता है: 'stuffA' की घोषणा वैश्विक घोषणा को छाया देती है। –

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