【问题标题】:Where is an enum stored?枚举存储在哪里?
【发布时间】:2021-01-09 08:48:09
【问题描述】:

在执行以下操作时,我很惊讶没有为 Enums 生成程序集:

我想也许它会做这样的事情:

Hello:
    .byte 0
Goodbye:
    .byte 1

它似乎只在分配给 var 时添加值:

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

【问题讨论】:

标签: c assembly enums compilation


【解决方案1】:

枚举不是变量,它是一种类型。不同的枚举标签实际上是常量。 作为一种类型,它在最终二进制文件中不需要空格。

编译器在内部保留一个它们的列表,并用它们代表的常量替换它们的每次使用。

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

【讨论】:

  • 有道理,谢谢。还惊讶地发现它也没有出现在最初的 K&R C 中。
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多