2011-06-22 69 views

回答

92

是的。除非您在枚舉的定義中另外指定,否則初始枚舉器的值始終爲零,並且每個後續枚舉器的值比前一個枚舉器的值大1。

+10

,並且C和C++都需要這種相同的行爲。在C++中,它是'[dcl.enum]':「如果第一個枚舉器沒有初始值設定項,則對應的常量值爲零。沒有初始值設定項的枚舉數定義 爲枚舉值賦予值以前的統計員一個。「 –

+2

是的,還有其他以C開頭的語言,如C#。 –

44

C99標準

N1265 C99 draft說在6.7.2.2/3 「枚舉說明符」

枚舉器與=定義其枚舉常數作爲常量表達式的值。如果第一個枚舉數沒有=,則枚舉常量的值爲0.每個隨後的枚舉數no = 將其枚舉常量定義爲常數表達式的值,該常數表達式通過將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

是的,枚舉值bydefult從0到第n個元素開始到任何平臺。

+9

考慮你的答案如何增加答案池。也就是說,你的新答案(5年後)如何添加新的內容,而不包含在另一個答案中?乍一看,它似乎比其他兩個答案的信息量少。 – LawfulEvil

+0

Ehhh @LawfulEvil放鬆。多個答案讓人們在未來看到多個角度。也就是說,這是一個格式不好,沒有明確答案的答案,但它們本身的充足答案並不差。 –