我知道“枚举”数据类型是用户定义的数据类型,而“枚举” 变量是'int'的大小。
我知道'enum_variable'的大小为32位,不是 强制性的。但是,这里的困惑之处在于,如果[bit] 32位如何共同存储所有“枚举”值?
enum identifier
{
value1 = 0, value2 = 20, value3 = 7000, value4 = 1234567
} enum_variable;
printf("%d\n",sizeof(enum_variable));
答案 0 :(得分:10)
枚举“值”根本不存储,因为它们是编译时命名的常量。
编译器只需将枚举符号的使用与其值交换即可。
此外,枚举值的类型为int
,因此实际大小可能有所不同。但是正因为如此,枚举值可以是与int
相同范围内的任何值。
有关更多信息,请参见this enumeration reference。
答案 1 :(得分:0)
枚举常量,例如value1
,只是数字。它们不存储在enum变量本身中,而是存储为任何其他数字常量:作为机器代码本身的一部分(通常称为.text
的一部分),或在单独的只读段中(通常称为的段) .rodata
)。
保证枚举常量的类型为int
,但这仅在使用它们的表达式中很重要。它们在内存中的实际存储方式由实现定义(取决于系统,编译器和链接器)。
实际变量可以具有任何大小,它是实现定义的。尽管编译器应选择适合最大枚举常量的大小。同样,它不过是一个简单的整数,只能容纳一个数字。
通常,C中的枚举只是纯整数顶部的“语法糖”。