Il compilatore memorizza le informazioni enum nel file binario quando il programma viene compilato con determinati opzioni
Quando una variabile è di tipo enum, un debugger può mostrare il nome dell'enumerazione, come mostrato meglio con un esempio:
enum E {
ONE_E = 1,
};
int main(void)
{
enum E e = 1;
return 0;
}
Se si compila che con gcc -g
è possibile provare quanto segue in 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)
Se è stato utilizzato un definiscono, non si avrebbe un tipo corretto di dare e
, e avrebbe dovuto usare un numero intero In tal caso, il compilatore stamperebbe 1
anziché ONE_E
.
Il flag -g
chiede a gdb di aggiungere informazioni di debug al binario. Si può anche vedere che è lì con l'emissione di:
xxd test | grep ONE_E
non credo che questo funzionerà in tutte le architetture, però.
ho modificato il titolo e ha aggiunto un tag, spero che non mi dispiacerebbe. :-) – Nawaz
@Nawaz. Va benissimo, non ti preoccupare. – Simplicity
possibile duplicato di ["const statico" vs "#define" in c] (http://stackoverflow.com/questions/1674032/static-const-vs-define-in-c) –