C语言中的sizeof枚举

abh*_*bhi 8 c

我怎么知道枚举的大小Days?它会等于7*4(sizeof(int)) = 28??
printf()这里给我的价值4,怎样才可以解释呢?

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

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

Som*_*ude 19

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

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

enum Days            
{
    saturday,
    sunday,
    monday,
    tuesday,
    wednesday,
    thursday,
    friday,
    NUM_DAYS
};
Run Code Online (Sandbox Code Playgroud)

然后NUM_DAYS将是枚举的数量Days.

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

enum Foo
{
    bar = 5,
    NUM_FOO
};
Run Code Online (Sandbox Code Playgroud)

在上面的枚举中,NUM_FOO将是6.

  • 你的答案有很大的疑问,因为你说**大部分时间都是*int`*类型的整数.但是,确切的答案是大小是**Imlpementation Defined**. (2认同)
  • 实际上大多数情况下``gcc`是`unsigned int`. (2认同)

Alo*_*ave 5

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

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

约束
2定义枚举常量值的表达式应为整数常量表达式,其值可表示为int.
...
4 每个枚举类型应与char,有符号整数类型或无符号整数类型兼容.类型的选择是实现定义的,128)但是应该能够表示枚举的所有成员的值.枚举类型在终止枚举器声明列表之后立即完成,并在此后完成.