Компилятор хранит информацию об перечислении в двоичном формате, когда программа скомпилирована с определенным опции
Когда переменная имеет тип перечисления, отладчик может отображать имя перечисления. Это лучше всего показать на примере:
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
Я не думаю, что это будет работать во всех архитектурах, хотя.
Я редактировал название и добавил один тег, надеюсь, вы не возражаете. :-) – Nawaz
@Nawaz. Все в порядке, не беспокойтесь об этом. – Simplicity
Возможный дубликат ["static const" vs "#define" в c] (http://stackoverflow.com/questions/1674032/static-const-vs-define-in-c) –