猿问

C ++-枚举vs.常量vs.#定义

在本文结尾处:http : //www.learncpp.com/cpp-tutorial/45-enumerated-types/,其中提到了以下内容:

最后,与常量变量一样,枚举类型将显示在调试器中,在这方面它们比#defined值更有用

上面的黑体字如何实现?

谢谢。


智慧大石
浏览 591回答 3
3回答

汪汪一只猫

enum 是带有调试信息的编译时间常数,没有存储分配。const 为它分配了一个存储,具体取决于编译器是否通过不断传播对其进行了优化。#define 没有存储分配。

SMILET

使用某些选项编译程序时,编译器会将枚举信息存储在二进制文件中。当变量为枚举类型时,调试器可以显示枚举名称。最好用示例显示:enum E {    ONE_E = 1,};int main(void){    enum E e = 1;    return 0;}如果使用它进行编译,则gcc -g可以尝试以下方法gdb:Reading symbols from test...done.(gdb) b mainBreakpoint 1 at 0x804839a: file test.c, line 8.(gdb) runStarting program: test Breakpoint 1, main () at test.c:77               enum E e = 1;(gdb) next9               return 0;(gdb) print e$1 = ONE_E(gdb) 如果使用了定义,则将没有适当的类型可以赋予e,而必须使用整数。在这种情况下,编译器将打印1而不是ONE_E。该-g标志要求gdb将调试信息添加到二进制文件中。您甚至可以通过发出以下命令来查看它的存在:xxd test | grep ONE_E不过,我认为这不适用于所有架构。
随时随地看视频慕课网APP
我要回答