Pregunta

Si agrego una macro "foo= bar" en gcc_preprocessor_definitions (o macros de preprocesador si usa xcode "), ¿cuál sería la mejor manera de acceder al valor de" foo "?

Actualmente, uso el torpe:

    #define MACRO_NAME(f) #f
    #define MACRO_VALUE(f)  MACRO_NAME(f)

    #ifdef FOO
        NSLog(@"%s", MACRO_VALUE(FOO));
    #else
        NSLog(@"undefined");
    #endif

Esto saldrá de la "barra"

Seguramente, debe haber una forma mejor / limpia?

¿Fue útil?

Solución

Lo que está haciendo es el camino a Stringize (o rinify ) Macro Valores.La indirección es inevitable.

Esto se menciona en el preprocesador de GCC Sección manual (enlace archivado) que Rob vinculado a:

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
 str (foo)
      ==> "foo"
 xstr (foo)
      ==> xstr (4)
      ==> str (4)
      ==> "4

Otros consejos

NSLog(@"%s", #FOO);

Consulte stringification .Es la técnica que ya estás usando.¿Qué estaba mal con eso?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top