C语言中的sizeof枚举

我怎么知道枚举Days的大小? 它是否等于7*4(sizeof(int)) = 28 ??
printf()在这里给我的价值4 ,怎么解释?

 enum Days { saturday, sunday , monday , tuesday, wednesday, thursday, friday } TheDay; printf("%d", sizeof(enum Days)); 

我们也可以使用它作为(枚举天)(0),它类似于整数数组。如果大小等于4那么这种数组行为如何解释?

在C中,所有枚举都是int类型的大部分时间整数,这解释了为什么sizeof(Days) == 4

要知道enum中有多少值,您可以执行以下操作:

 enum Days { saturday, sunday, monday, tuesday, wednesday, thursday, friday, NUM_DAYS }; 

然后NUM_DAYS将是Days数中的枚举Days

请注意,如果更改枚举的值,则无法执行此操作,例如:

 enum Foo { bar = 5, NUM_FOO }; 

在上面的枚举中, NUM_FOO将为6

它取决于实现。 枚举仅保证足够大以容纳整数值。

参考:
C99标准6.7.2.2枚举说明符

约束
2定义枚举常量值的表达式应为整数常量表达式,其值可表示为int。

4 每个枚举类型应与char,有符号整数类型或无符号整数类型兼容。 类型的选择是实现定义的, 128)但应能够表示枚举的所有成员的值 。 枚举类型在终止枚举器声明列表之后立即完成,并在此后完成。

在C中,枚举类型是一种实现定义的整数类型,它可以表示枚举中的所有枚举常量。

使用gcc如果枚举常量中没有负值,则实现定义类型为unsigned int否则为int

http://gcc.gnu.org/onlinedocs/gcc/Structures-unions-enumerations-and-bit_002dfields-implementation.html

枚举类型不应与枚举常量混淆。 枚举常量的类型为int

enum 通常大小为int 。 它是一个类型,而不是数组或结构,所以我不明白为什么你期望它是28。

使用我现在使用的编译器, sizeof(enum)取决于存储的最大值。 如果所有enum值都<= 0xFF则大小为1字节,但如果有值0x100则大小将为2字节...只需在enum添加值即可更改sizeof(MyEnum)的结果