我如何知道枚举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,那么如何解释这种数组行为?
答案 0 :(得分:19)
在C中,所有枚举都是int
类型的大部分时间整数,这解释了为什么sizeof(Days) == 4
为你解释。
要了解enum
中有多少值,您可以执行以下操作:
enum Days
{
saturday,
sunday,
monday,
tuesday,
wednesday,
thursday,
friday,
NUM_DAYS
};
然后NUM_DAYS
将是Days
中的枚举数。
请注意,如果更改枚举值,则无法执行此操作,例如:
enum Foo
{
bar = 5,
NUM_FOO
};
在上面的枚举中,NUM_FOO
将是6
。
答案 1 :(得分:5)
它取决于实现。枚举只能保证足够大以容纳整数值。
<强>参考:强>
C99标准6.7.2.2枚举说明符
<强>约束强>
2定义枚举常量值的表达式应为整数 具有可表示为int的值的常量表达式 ...
4 每个枚举类型应与char,有符号整数类型或无符号整数类型兼容。类型的选择是实现定义的, 128)但是应该能够表示枚举的所有成员的值。枚举类型直到完成枚举器声明列表的}之后才会完整,然后完成。
答案 2 :(得分:3)
enum
的通常大小为int
。它是一个类型,而不是数组或结构,所以我不明白为什么你期望它是28。
答案 3 :(得分:3)
在C中,枚举类型是一种实现定义的整数类型,它可以表示枚举中的所有枚举常量。
如果枚举常量中没有负值,则使用gcc
,实现定义类型为unsigned int
,否则为int
。
不应将枚举类型与枚举常量混淆。枚举常量的类型为int
。
答案 4 :(得分:1)
使用我现在使用的编译器,sizeof(enum)
取决于存储的最大值。如果所有enum
值都是<= 0xFF
,则大小为1个字节,但如果值为0x100
,则大小将为2个字节...只需在{{1}中添加值}}可以更改enum