3 回答
TA贡献1898条经验 获得超8个赞
enum
是带有调试信息的编译时间常数,没有存储分配。
const
为它分配了一个存储,具体取决于编译器是否通过不断传播对其进行了优化。
#define
没有存储分配。
TA贡献1796条经验 获得超4个赞
使用某些选项编译程序时,编译器会将枚举信息存储在二进制文件中。
当变量为枚举类型时,调试器可以显示枚举名称。最好用示例显示:
enum E {
ONE_E = 1,
};
int main(void)
{
enum E e = 1;
return 0;
}
如果使用它进行编译,则gcc -g可以尝试以下方法gdb:
Reading symbols from test...done.
(gdb) b main
Breakpoint 1 at 0x804839a: file test.c, line 8.
(gdb) run
Starting program: test
Breakpoint 1, main () at test.c:7
7 enum E e = 1;
(gdb) next
9 return 0;
(gdb) print e
$1 = ONE_E
(gdb)
如果使用了定义,则将没有适当的类型可以赋予e,而必须使用整数。在这种情况下,编译器将打印1而不是ONE_E。
该-g标志要求gdb将调试信息添加到二进制文件中。您甚至可以通过发出以下命令来查看它的存在:
xxd test | grep ONE_E
不过,我认为这不适用于所有架构。
- 3 回答
- 0 关注
- 590 浏览
添加回答
举报