带__VA_ARGS__的Concat字符串

时间:2015-03-06 10:01:45

标签: c macros c-preprocessor string-concatenation variadic-macros

我有以下宏:

 #define MY_FCT1( id, ... )       \
    FCT( id,__VA_ARGS__ );        \

我想创建一个新的类似的东西:

 #define MY_FCT2( id, ... )                           \
    MY_FCT1( id, (" %s : ",Name())" "__VA_ARGS__);    \

但是我收到以下错误:

  

错误:表达式不能用作函数

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

目前尚无法确定您要做的事情。宏不能调用函数。宏可以生成包含函数调用的替换文本,但函数不会被调用直到运行时。

要将Name()添加到__VA_ARGS__收到的MY_FCT1,只需将其添加为带逗号的普通参数。

 #define MY_FCT2( id, ... )                           \
    MY_FCT1( id, Name(), __VA_ARGS__);

您似乎尝试使用带引号的空格字符作为连接运算符。此操作符(仅在宏的替换文本中有效)为##。例如

#define CAT(x,y) x ## y
//or
#define CAT(x,y) x##y
//                ^ ^    spaces are not relevant here