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
。
枚举类型不应与枚举常量混淆。 枚举常量的类型为int
。
enum
通常大小为int
。 它是一个类型,而不是数组或结构,所以我不明白为什么你期望它是28。
使用我现在使用的编译器, sizeof(enum)
取决于存储的最大值。 如果所有enum
值都<= 0xFF
则大小为1字节,但如果有值0x100
则大小将为2字节...只需在enum
添加值即可更改sizeof(MyEnum)
的结果