访问预处理程序宏定义的值

时间:2010-07-16 03:36:07

标签: objective-c xcode macros c-preprocessor stringification

如果我在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”

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

2 个答案:

答案 0 :(得分:10)

您正在做的是 stringize (或 stringify )宏值的方式。间接是不可避免的。

甚至在Rob链接到的GCC预处理器manual section中也提到了这一点。

答案 1 :(得分:2)

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

Stringification。这是你已经使用的技术。这有什么问题?