枚举类型存储在哪里?

4

当我进行以下操作时,我很惊讶没有为Enums生成任何汇编代码:

enter image description here

我认为它可能会做一些类似于:

Hello:
    .byte 0
Goodbye:
    .byte 1

看起来只有将值赋给变量时才会添加:

enter image description here

为什么会这样?即使我设置了Hello=1,为什么'枚举值'在声明时不会被存储?示例链接:https://godbolt.org/z/xxnMvq

1
它们存储在编译器的数据集中,以便在程序的其他地方使用。enum { Hello, Goodbye } 定义值,而不是变量。然后,在标签 c: 处使用了 1 - Weather Vane
4
这些值并不会被储存,它们作为常量在编译器级别上可用,并且在语句中使用时会直接转换为整数。 - Roberto Caboni
如果你这样定义:enum {Hi, Bye} greeting;,那么 greeting 就是一个枚举类型的变量。 - Erik Eidt
1个回答

8

枚举并不是一个变量,而是一种类型。枚举标签实际上是常量。作为一种类型,它在最终的二进制代码中不需要占用内存空间。

编译器在内部维护了一个枚举列表,并将每个枚举使用处替换为其所表示的常量。

然而,如果生成调试信息,这些值会出现在调试信息中,因此您可以在调试器中使用它们。


有道理,谢谢。同时也很惊讶原版的K&R C中没有这个内容。 - samuelbrody1249

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接