如下所示聲明枚舉時,所有C編譯器在Linux和Windows系統上都將缺省值設置爲x=0
,y=1
和z=2
?對於所有編譯器,C中的默認枚舉值是否相同?
typedef enum {
x,
y,
z
} someName;
如下所示聲明枚舉時,所有C編譯器在Linux和Windows系統上都將缺省值設置爲x=0
,y=1
和z=2
?對於所有編譯器,C中的默認枚舉值是否相同?
typedef enum {
x,
y,
z
} someName;
是的。除非您在枚舉的定義中另外指定,否則初始枚舉器的值始終爲零,並且每個後續枚舉器的值比前一個枚舉器的值大1。
,並且C和C++都需要這種相同的行爲。在C++中,它是'[dcl.enum]':「如果第一個枚舉器沒有初始值設定項,則對應的常量值爲零。沒有初始值設定項的枚舉數定義 爲枚舉值賦予值以前的統計員一個。「 –
是的,還有其他以C開頭的語言,如C#。 –
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);
是的,枚舉值bydefult從0到第n個元素開始到任何平臺。
考慮你的答案如何增加答案池。也就是說,你的新答案(5年後)如何添加新的內容,而不包含在另一個答案中?乍一看,它似乎比其他兩個答案的信息量少。 – LawfulEvil
Ehhh @LawfulEvil放鬆。多個答案讓人們在未來看到多個角度。也就是說,這是一個格式不好,沒有明確答案的答案,但它們本身的充足答案並不差。 –
是的,這是標準所要求的,我相信有人能夠引用它們。 – Nemo