如何用C语言存储“枚举”值?

时间:2018-08-21 09:06:09

标签: c enums

我知道“枚举”数据类型是用户定义的数据类型,而“枚举”        变量是'int'的大小。

  1. 上面的“标识符”是一组常量值,这些常量值具有别名名称,这些值如何存储在内存中?我的意思是,“ value1”存储在内存中的方式是“ 0”,“ value2”存储在“ 20”的方式,而“ value3”存储是在“ 7000”的方式,而“ value4”存储是即“ 1234567”的方式在内存中。
  2. 我知道'enum_variable'的大小为32位,不是 强制性的。但是,这里的困惑之处在于,如果[bit] 32位如何共同存储所有“枚举”值?

    enum identifier
    {
      value1 = 0, value2 = 20, value3 = 7000, value4 = 1234567
    } enum_variable;
    
    printf("%d\n",sizeof(enum_variable));
    

2 个答案:

答案 0 :(得分:10)

枚举“值”根本不存储,因为它们是编译时命名的常量。

编译器只需将枚举符号的使用与其值交换即可。

此外,枚举值的类型为int,因此实际大小可能有所不同。但是正因为如此,枚举值可以是与int相同范围内的任何值。

有关更多信息,请参见this enumeration reference

答案 1 :(得分:0)

  1. 枚举常量,例如value1,只是数字。它们不存储在enum变量本身中,而是存储为任何其他数字常量:作为机器代码本身的一部分(通常称为.text的一部分),或在单独的只读段中(通常称为的段) .rodata)。

    保证枚举常量的类型为int,但这仅在使用它们的表达式中很重要。它们在内存中的实际存储方式由实现定义(取决于系统,编译器和链接器)。

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

通常,C中的枚举只是纯整数顶部的“语法糖”。