2010-07-16 24 views
14

Se aggiungo una macro "FOO = bar" in GCC_PREPROCESSOR_DEFINITIONS (o Macro preprocessore se si utilizza XCode "), quale sarebbe il modo migliore per accedere al valore di" FOO "?Accesso al valore di una macro Definizione di preprocessore

Attualmente, io 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 

Questa uscita volontà "bar"

Sicuramente, ci deve essere un modo migliore/più pulito

risposta

10

Quello che state facendo è il modo-stringize (o stringa i) i valori delle macro. L'indirezione è inevitabile.

Questo è anche menzionato nel preprocessore GCC manual section a cui Rob si è collegato.

+0

Grazie per la conferma. – Adriaan

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

Vedere Stringification. È la tecnica che stai già utilizzando. Cosa c'era di sbagliato in questo?

+1

Ciò risulterebbe in "NSLog (@"% s ", #bar);' dopo la pre-elaborazione, è necessaria l'indirezione tramite un'altra macro per consentire l'espansione della macro. –

+0

Notato e concordato. –

+0

Significa che non è possibile trasformare una macro di stringa del preprocessore in una costante NSString a destra? (Perché non appena si esegue [NSString stringWithFormat: macroString] cessa di essere un inizializzatore costante.) – zekel

Problemi correlati