在字符串字面量中扩展宏。

32
我想做的是定义一个宏:#define
#define a(2)

然后在字符串字面值中使用它:string = "a";

我希望该字符串不被解释为字符串,而是获取a的值,即2。但我没有成功,有人可以帮忙吗?

2个回答

43
#define STRINGIFY2(X) #X
#define STRINGIFY(X) STRINGIFY2(X)
#define A 2

接着 STRINGIFY(A) 将会给你 "2"。你可以将它与其他字符串文字拼接在一起,将它们并排放置。

"I have the number " STRINGIFY(A) "." 会给你 "I have the number 2."


7
现在加入关键的元素,相邻的字符串文本将被连接起来,这就是答案。 - pmr
1
如果您不想依赖连接功能,可以尝试:STRINGIFY(我有数字A)(我不确定末尾的点)。 - imz -- Ivan Zakharyaschev
请注意,需要使用包装扩展来进行额外的间接引用。 - BjornW
我正在使用 #include "filename_" STRINGIFY(VERSION) ".hpp" 并且遇到了两个错误:fatal error: filename_: No such file or directorywarning: extra tokens at end of #include directive(指向STRINGIFY)。 - Mark Jeronimus

8

不,你不能在字符串字面值内部进行宏展开(即让预处理器查找要展开的宏)。

你可以使用字符串化运算符(#)进行宏展开以生成一个字符串字面值。但这是另一回事。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接