14

GCC_PREPROCESSOR_DEFINITIONS(またはXCodeを使用する場合はプリプロセッサマクロ)の下にマクロ「FOO = bar」を追加した場合、「FOO」の値にアクセスするための最良の方法は何でしょうか。

現在、私は不器用なものを使用しています:

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

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

これは「バー」を出力します

確かに、より良い/よりクリーンな方法があるはずですか?

4

2 に答える 2

10

あなたがしているのは、マクロ値を文字列化(または文字列化)する方法です。間接化は避けられません。

これは、RobがリンクしたGCCプリプロセッサのマニュアルセクション(アーカイブされたリンク)に記載されています。

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
 str (foo)
      ==> "foo"
 xstr (foo)
      ==> xstr (4)
      ==> str (4)
      ==> "4
于 2010-07-16T04:00:20.803 に答える
2
NSLog(@"%s", #FOO);

文字列化を参照してください。それはあなたがすでに使っているテクニックです。何が問題だったのですか?

于 2010-07-16T03:43:00.943 に答える