C语言中的sizeof枚举

时间:2012-04-02 07:24:08

标签: c

我如何知道枚举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,那么如何解释这种数组行为?

5 个答案:

答案 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

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

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

答案 4 :(得分:1)

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

的结果