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?

Foi útil?

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
scroll top