如何使用cpp将宏转换为字符串?

时间:2011-07-28 00:37:21

标签: c++ string constants stringification

GNU的cpp允许你将宏参数转换成类似的字符串

#define STR(x) #x

然后,STR(hi)"hi"

取代

但是如何将宏(不是宏参数)转换为字符串?

假设我有一个带有某些值的宏CONSTANT,例如

#define CONSTANT 42

这不起作用:STR(CONSTANT)。这会产生"CONSTANT",这不是我们想要的。

2 个答案:

答案 0 :(得分:14)

诀窍是定义一个调用STR的新宏。

#define STR(str) #str
#define STRING(str) STR(str)

然后STRING(CONSTANT)根据需要产生"42"

答案 1 :(得分:10)

你需要双重间接魔术:

#define QUOTE(x) #x
#define STR(x) QUOTE(x)

#define CONSTANT 42

const char * str = STR(CONSTANT);