当我进行以下操作时,我很惊讶没有为Enums
生成任何汇编代码:
我认为它可能会做一些类似于:
Hello:
.byte 0
Goodbye:
.byte 1
看起来只有将值赋给变量时才会添加:
为什么会这样?即使我设置了Hello=1
,为什么'枚举值'在声明时不会被存储?示例链接:https://godbolt.org/z/xxnMvq。当我进行以下操作时,我很惊讶没有为Enums
生成任何汇编代码:
我认为它可能会做一些类似于:
Hello:
.byte 0
Goodbye:
.byte 1
看起来只有将值赋给变量时才会添加:
为什么会这样?即使我设置了Hello=1
,为什么'枚举值'在声明时不会被存储?示例链接:https://godbolt.org/z/xxnMvq。枚举并不是一个变量,而是一种类型。枚举标签实际上是常量。作为一种类型,它在最终的二进制代码中不需要占用内存空间。
编译器在内部维护了一个枚举列表,并将每个枚举使用处替换为其所表示的常量。
然而,如果生成调试信息,这些值会出现在调试信息中,因此您可以在调试器中使用它们。
enum { Hello, Goodbye }
定义值,而不是变量。然后,在标签c:
处使用了1
。 - Weather Vaneenum {Hi, Bye} greeting;
,那么greeting
就是一个枚举类型的变量。 - Erik Eidt