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 關注
- 628 瀏覽
添加回答
舉報