GNU的cpp允许你将宏参数转换成类似的字符串
#define STR(x) #x
然后,STR(hi)
被"hi"
但是如何将宏(不是宏参数)转换为字符串?
假设我有一个带有某些值的宏CONSTANT,例如
#define CONSTANT 42
这不起作用:STR(CONSTANT)
。这会产生"CONSTANT"
,这不是我们想要的。
答案 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);