14

如果我在 GCC_PREPROCESSOR_DEFINITIONS 下添加宏“FOO=bar”(如果使用 XCode,则添加预处理器宏),访问“FOO”值的最佳方法是什么?

目前,我使用笨拙的:

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

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

这将输出“bar”

当然,必须有更好/更清洁的方法吗?

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 回答