为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
智慧大石 2019-12-04 12:32:42
在本文结尾处:http : //www.learncpp.com/cpp-tutorial/45-enumerated-types/,其中提到了以下内容:最后,与常量变量一样,枚举类型将显示在调试器中,在这方面,它们比#defined值更有用。上面的黑体字如何实现?谢谢。
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

enum 是带有调试信息的编译时间常数,没有存储分配。

const 为它分配了一个存储,具体取决于编译器是否通过不断传播对其进行了优化。

#define 没有存储分配。


查看完整回答
反对 回复 2019-12-04
?
SMILET

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

不过,我认为这不适用于所有架构。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 590 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信