我有以下宏:
#define MY_FCT1( id, ... ) \
FCT( id,__VA_ARGS__ ); \
我想创建一个新的类似的东西:
#define MY_FCT2( id, ... ) \
MY_FCT1( id, (" %s : ",Name())" "__VA_ARGS__); \
但是我收到以下错误:
错误:表达式不能用作函数
有人知道如何解决这个问题吗?
答案 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