如果我在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”
当然,必须有更好/更清洁的方式?
答案 0 :(得分:10)
您正在做的是 stringize (或 stringify )宏值的方式。间接是不可避免的。
甚至在Rob链接到的GCC预处理器manual section中也提到了这一点。
答案 1 :(得分:2)
NSLog(@"%s", #FOO);
见Stringification。这是你已经使用的技术。这有什么问题?