亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 628 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號