2011-06-22 16 views
82

नीचे दिखाए गए एनम की घोषणा करते समय, सभी सी कंपाइलर्स डिफ़ॉल्ट मान को x=0, y=1, और z=2 दोनों लिनक्स और विंडोज सिस्टम पर सेट करते हैं?सभी कंपेलरों के लिए सी में डिफ़ॉल्ट enum मान हैं?

typedef enum { 
    x, 
    y, 
    z 
} someName; 
+3

हां, यह मानकों के अनुसार आवश्यक है, और मुझे यकीन है कि कोई उन्हें उद्धृत करने में सक्षम होगा। – Nemo

उत्तर

92

हां। जब तक आप गणना की परिभाषा में अन्यथा निर्दिष्ट नहीं करते हैं, प्रारंभिक गणक के पास हमेशा शून्य शून्य होता है और प्रत्येक अनुवर्ती गणनाकर्ता का मान पिछले गणनाकर्ता से अधिक होता है।

+10

और, यह समान व्यवहार दोनों सी और सी ++ द्वारा आवश्यक है। सी ++ में, यह '[dcl.enum] 'है:" यदि पहले गणनाकर्ता के पास कोई प्रारंभिक नहीं है, तो इसी स्थिरता का मान शून्य है। प्रारंभकर्ता के बिना एक गणक-परिभाषा अंकुशक को मान को बढ़ाकर प्राप्त मूल्य देता है एक द्वारा पिछले गणक। " –

+2

हां, और अन्य भाषाएं जो अक्षर सी से शुरू होती हैं, जैसे सी #। –

44

C99 स्टैंडर्ड

N1265 C99 draft 6.7.2.2/3 "गणन विनिर्देशक"

एक प्रगणक पर कहते हैं के साथ = इसकी गणना स्थायी अभिव्यक्ति के मूल्य के रूप में निरंतर परिभाषित करता है। यदि पहले गणक के पास = नहीं है, तो इसके गणना का मान निरंतर 0 है। प्रत्येक अनुवर्ती गणनाकर्ता = के साथ प्रत्येक गणना को निरंतर अभिव्यक्ति के मान को परिभाषित करता है क्योंकि पिछले गणना निरंतर के मान में 1 जोड़कर प्राप्त किया गया है। (= साथ प्रगणक के उपयोग के मूल्यों है कि एक ही गणना में अन्य मूल्यों नकल के साथ गणन स्थिरांक उत्पादन हो सकता है।)

तो हमेशा निम्न अनुरूप कार्यान्वयन पर रखती है:

enum E { 
    E0, 
    E1, 
    E2 = 3, 
    E3, 
    E4 = INT_MAX, 
    /* Compile time error: Overflow in enumeration values */ 
    /*E5*/ 
}; 

/* If unspecified, the first is 0. */ 
assert(E0 == 0); 
assert(E1 == 1); 
assert(E2 == 3); 
/* Continue from the last one. */ 
assert(E3 == 4); 
assert(E4 == INT_MAX); 
-12

हाँ, enum मूल्य bydefult किसी भी मंच पर 0 से n'th तत्व से शुरू करें।

+9

विचार करें कि आपका उत्तर उत्तर के पूल में कैसे जोड़ता है। यही है, आपका नया उत्तर (5 साल बाद) कुछ नया जोड़ता है जो किसी अन्य उत्तर में शामिल नहीं होता है? पहली नज़र में, यह दो अन्य उत्तरों की तुलना में कम जानकारीपूर्ण प्रतीत होता है। – LawfulEvil

+0

एहह @ लाउफुल एविल आराम करो। कई उत्तर भविष्य में कई दृष्टिकोणों को देखते हुए लोगों को देते हैं। उस ने कहा, यह एक खराब प्रारूपित, अपरिवर्तनीय उत्तर है, लेकिन अपने आप में पर्याप्त जवाब खराब नहीं हैं। –

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