你怎么样';枚举';用C语言存储的值?
我知道'enum'数据类型是用户定义的数据类型,而'enum' 变量的大小为“int”。你怎么样';枚举';用C语言存储的值?,c,enums,C,Enums,我知道'enum'数据类型是用户定义的数据类型,而'enum' 变量的大小为“int”。 上面的“标识符”是一组常量值,具有常量值的别名,这些值如何存储在内存中?我的意思是“value1”如何存储,即“0”,“value2”如何存储,即“20”,“value3”如何存储,即“7000”,以及“value4”如何存储,即“1234567”如何存储在内存中 我知道'enum_variable'的大小是32位,而不是32位 强制性的但这里令人困惑的是,32位[if]如何共同存储所有“enum”值 en
enum identifier
{
value1 = 0, value2 = 20, value3 = 7000, value4 = 1234567
} enum_variable;
printf("%d\n",sizeof(enum_variable));
int
,因此确切大小可能不同。但正因为如此,枚举值可以是与int
相同范围内的任何值
有关更多信息,请参见枚举“值”根本不存储,因为它们是编译时命名的常量
编译器只需使用枚举符号的值来交换枚举符号的使用
此外,枚举值的类型为int
,因此确切大小可能不同。但正因为如此,枚举值可以是与int
相同范围内的任何值
有关更多信息,请参见例如
value1
)只是数字。它们不存储在枚举变量本身中,而是作为任何其他数值常量存储:或者作为机器代码本身的一部分(段通常称为.text
),或者存储在单独的只读段(段通常称为.rodata
)中
枚举常量的类型保证为int
,但这仅在使用它们的表达式中起作用。它们在内存中的实际存储方式由实现定义(取决于系统、编译器和链接器)
value1
)只是数字。它们不存储在枚举变量本身中,而是作为任何其他数值常量存储:或者作为机器代码本身的一部分(段通常称为.text
),或者存储在单独的只读段(段通常称为.rodata
)中
枚举常量的类型保证为int
,但这仅在使用它们的表达式中起作用。它们在内存中的实际存储方式由实现定义(取决于系统、编译器和链接器)
一般来说,C中的枚举只是普通整数之上的“语法糖”。要打印
sizeof
使用打印sizeof
使用它为什么会产生“4字节”?“4bytes”在本文中是什么意思?因为在您的计算机上,整数类型存储在4字节中,它是大小为4字节的常量还是大小为4字节的变量?@shaiknisarahmed在现代典型的32位或64位计算机上,int
的大小是4字节。在较小的嵌入式系统上,它可能仍然是两个字节。在未来的系统中,没有任何东西可以阻止它成为八个或更多。@SouravKannanthaB常量在文件范围(外部函数)中定义的变量将具有外部链接,因此可以从其他翻译单元获得,编译器无法删除其定义。但是,如果已知该值(即在定义该值的同一翻译单元中),编译器可以将编译时常量折叠(用其值替换其使用)作为优化。枚举值没有存储,它们在编译后不存在,因此更类似于宏。但是比宏更安全一些。为什么它会产生“4字节”?“4bytes”在本文中是什么意思?因为在您的计算机上,整数类型存储在4字节中,它是大小为4字节的常量还是大小为4字节的变量?@shaiknisarahmed在现代典型的32位或64位计算机上,int
的大小是4字节。在较小的嵌入式系统上,它可能仍然是两个字节。在未来的系统中,没有任何东西可以阻止它成为八个或更多。@SouravKannanthaB常量在文件范围(外部函数)中定义的变量将具有外部链接,因此可以从其他翻译单元获得,编译器无法删除其定义。但是,如果已知该值(即在定义该值的同一翻译单元中),编译器可以将编译时常量折叠(用其值替换其使用)作为优化。枚举值没有存储,它们在编译后不存在,因此更类似于宏。但是比宏更安全一些。