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?

È stato utile?

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