你怎么样';枚举';用C语言存储的值?

你怎么样';枚举';用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'数据类型是用户定义的数据类型,而'enum' 变量的大小为“int”。

  • 上面的“标识符”是一组常量值,具有常量值的别名,这些值如何存储在内存中?我的意思是“value1”如何存储,即“0”,“value2”如何存储,即“20”,“value3”如何存储,即“7000”,以及“value4”如何存储,即“1234567”如何存储在内存中
  • 我知道'enum_variable'的大小是32位,而不是32位 强制性的但这里令人困惑的是,32位[if]如何共同存储所有“enum”值

    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
    ,但这仅在使用它们的表达式中起作用。它们在内存中的实际存储方式由实现定义(取决于系统、编译器和链接器)

  • 实际变量可以有任何大小,由实现定义。尽管编译器应该选择适合最大枚举常量的大小。同样,它只是一个简单的整数,它只能容纳一个数字

  • 一般来说,C中的枚举只是普通整数之上的“语法糖”

  • 枚举常量(如
    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常量在文件范围(外部函数)中定义的变量将具有外部链接,因此可以从其他翻译单元获得,编译器无法删除其定义。但是,如果已知该值(即在定义该值的同一翻译单元中),编译器可以将编译时常量折叠(用其值替换其使用)作为优化。枚举值没有存储,它们在编译后不存在,因此更类似于宏。但是比宏更安全一些。