1

可能重复:
C 预处理器,将宏的结果字符串化

我有这个定义:

#define VERSION 0.3.2

我想把它转换成@"0.3.2"(一个 NSString)——这可能吗?假设我不允许在#define 中添加引号。

像这样的东西,但大概有一个额外的步骤:

NSString *myVersion = [NSString stringWith???:VERSION];
4

2 回答 2

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
于 2012-07-19T00:15:43.943 回答
1

字符串化

#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)

@HotLick 的宏魔法是最好的。

于 2012-07-19T00:15:35.423 回答