Acessar o valor de um pré-processador definição de Macro
-
16-09-2020 - |
Pergunta
Se eu adicionar uma macro "FOO=bar", sob GCC_PREPROCESSOR_DEFINITIONS (ou pré-processador de Macros se você usar o XCode"), qual seria a melhor maneira para acessar o valor de "FOO"?
Atualmente, eu uso o desajeitado:
#define MACRO_NAME(f) #f
#define MACRO_VALUE(f) MACRO_NAME(f)
#ifdef FOO
NSLog(@"%s", MACRO_VALUE(FOO));
#else
NSLog(@"undefined");
#endif
Isso vai de saída "bar"
Certamente, deve haver um melhor/forma de limpeza?
Solução
O que você está fazendo é a forma para stringize (ou stringify) valores de macro.O engano é inevitável.
Isso é mencionado no GCC pré-processador seção do manual (arquivado link) que Rob ligados:
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
str (foo)
==> "foo"
xstr (foo)
==> xstr (4)
==> str (4)
==> "4
Outras dicas
NSLog(@"%s", #FOO);
Ver Stringification.É a técnica que você já está usando.O que havia de errado com ele?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow