是否可以在宏替换的替换序列中使用常量

时间:2012-06-26 09:42:51

标签: c string macros c-preprocessor

在对象类型宏中,可以在下面,

#define str "this is a string"

我想知道是否可以在函数类型宏中使用这种类型的字符串文字,如下所示,

#define mkstr(a) #a
#define str(s1,s2) mkstr(s1 ## s2 ## "extra")

我运行这个并得到错误,现在我想知道有没有办法在函数类型宏的替换序列中使用常量???

2 个答案:

答案 0 :(得分:4)

是。只需将字符串放在一起:C语言接受它作为字符串常量连接。

#define str(s1,s2)   s1 s2 "extra"

答案 1 :(得分:0)

我在你的例子中看到一个问题,你有两次#defined str:

#define str "this is a string"
#define mkstr(a) #a
#define str(s1,s2) mkstr(s1 ## s2 ## "extra")

尝试将其更改为:

#define str_const "this is a string"
#define str(s1,s2) s1 s2 "extra")

然后我认为你会更清楚。如果你想创建一个看起来像this is a string extra的字符串,那么这里的宏就是用上面的宏来做的。

#define str(s1) str_const "extra"