C中的默认枚举值对所有编译器都是一样的吗?

当声明如下所示的枚举时,是否所有的C编译器在Linux和Windows系统上都将默认值设置为x=0y=1z=2

 typedef enum { x, y, z } someName; 

是。 除非在枚举的定义中另外指定,否则初始枚举数始终为零,每个后续枚举数的值比前一个枚举数大。

C99标准

N1265 C99草案在6.7.2.2/3“枚举说明符”

具有=的枚举器将其枚举常量定义为常量expression式的值。 如果第一个枚举值为no,则枚举常量的值为0.每个随后的枚举值no =将其枚举常量定义为通过将前一个枚举常量的值加1而获得的常量expression式的值。 (具有=的枚举的使用可以产生具有在同一个枚举中复制其他值的枚举常量。)

所以在符合实现方面总是如下:

 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); 

是的,enum value by defult从0到n元素开始到任何平台。