我在构建设置中定义了一个预处理器宏
FOO=BAR
我想将该值转换为可以传递给方法的 Objective-C 字符串文字。以下 #define 不起作用,但它应该展示我想要实现的目标:
#define FOOLITERAL @"FOO" //want FOOLITERAL to have the value of @"BAR"
myMethodThatTakesAnNSString(FOOLITERAL);
我希望我只是错过了一些明显的东西,但我似乎无法找到合适的预处理器巫毒来获得我需要的东西。
Use the 字符串化运算符 #
从符号中生成一个 C 字符串。但是,由于预处理器的一个怪癖,您需要使用两层额外的宏:
#define FOO BAR
#define STRINGIZE(x) #x
#define STRINGIZE2(x) STRINGIZE(x)
#define FOOLITERAL @ STRINGIZE2(FOO)
// FOOLITERAL now expands to @"BAR"
额外层的原因是字符串化运算符只能用于宏的参数,而不能用于其他标记。其次,如果宏的参数在宏主体中应用了字符串化运算符,则该参数是not扩展为另一个宏。所以,为了确保FOO
被扩展,我们包装在另一个宏中,这样当STRINGIZE2
扩大了,也扩大了FOO
因为字符串化运算符没有出现在该宏的主体中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)