我有这个定义:
#define VERSION 0.3.2
我想将其转换为@"0.3.2"
(NSString) - 这可能吗?假设我不允许在#define中添加引号。
这样的事情,但可能还有一个额外的步骤:
NSString *myVersion = [NSString stringWith???:VERSION];
答案 0 :(得分:2)
正如在我链接的可能的dup中,你需要两个更多级别的宏,因为你想要对宏扩展进行字符串化:
#define VERSION 0.3.2
#define StringifyWithoutExpandingMacros(x) #x
#define Stringify(x) StringifyWithoutExpandingMacros(x)
NSLog(@"VERSION = %@", @StringifyWithoutExpandingMacros(VERSION));
// output: VERSION = VERSION
NSLog(@"VERSION = %@", @Stringify(VERSION));
// output: VERSION = 0.3.2
请注意,您只需在宏调用前粘贴@
即可。它不需要在宏内。如果你愿意,可以把它放在宏中:
#define NSStringifyWithoutExpandingMacros(x) @#x
#define NSStringify(x) NSStringifyWithoutExpandingMacros(x)
NSLog(@"VERSION = %@", NSStringify(VERSION));
// output: VERSION = 0.3.2
答案 1 :(得分:1)
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)
@ HotLick的宏观魔力是最好的。