我有以下宏:
#define MY_FCT1( id, ... ) \
FCT( id,__VA_ARGS__ ); \
我想创建一个新的来做这样的事情:
#define MY_FCT2( id, ... ) \
MY_FCT1( id, (" %s : ",Name())" "__VA_ARGS__); \
但我收到以下错误:
error: expression cannot be used as a function
有人知道如何解决这个问题吗?
最佳答案
目前还不清楚您要做什么。宏不能调用函数。宏可以生成包含函数调用的替换文本,但该函数直到运行时才会被调用。
要将 Name()
添加到 MY_FCT1
接收的 __VA_ARGS__
中,只需像使用逗号的普通参数一样添加它。
#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
关于使用 __VA_ARGS__ 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28896383/