如果我在gcc_preprocessor_definition下添加宏“foo= bar”(如果使用xcode,则使用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
.

这将输出“栏”

肯定,必须有更好/清洁的方式?

有帮助吗?

解决方案

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

在gcc preprocessor 手动部分(存档链接)

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
 str (foo)
      ==> "foo"
 xstr (foo)
      ==> xstr (4)
      ==> str (4)
      ==> "4
.

其他提示

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

请参阅 stringification 。这是您已经使用的技术。它有什么问题?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top