Accesso al valore di una definizione di macro preprocessore
-
16-09-2020 - |
Domanda
Se aggiungo una macro "foo= bar" in gcc_preprocessor_definitions (o macro di preprocessore se si utilizza Xcode "), quale sarebbe il modo migliore per accedere al valore di" foo "?
Attualmente, uso il goffo:
#define MACRO_NAME(f) #f
#define MACRO_VALUE(f) MACRO_NAME(f)
#ifdef FOO
NSLog(@"%s", MACRO_VALUE(FOO));
#else
NSLog(@"undefined");
#endif
.
Questo emetterà "barra"
Sicuramente, deve esserci un modo migliore / più pulito?
Soluzione
Cosa stai facendo è la via a stringizza (o stringify ) valori macro.L'indirezione è inevitabile.
Questo è menzionato nel preprocessore GCC Sezione manuale (collegamento archiviato) che Rob è collegato a:
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
str (foo)
==> "foo"
xstr (foo)
==> xstr (4)
==> str (4)
==> "4
. Altri suggerimenti
NSLog(@"%s", #FOO);
.
Vedi Stringing .È la tecnica che stai già utilizzando.Cosa c'era di sbagliato in questo?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow