使用 __VA_ARGS__ 连接字符串

标签 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__);    \

但我收到以下错误:

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/

相关文章:

c# - #define 宏的 C 到 C# 转换

c - 为单元测试编写复杂的预处理器宏

c - 我们如何限制用户在 C 中输入字符和大于指定长度的整数?

opengl - GLSL 中可以进行可变参数宏扩展吗?

c++ - 将 C++ 结构传递给需要 C 结构的库

c - 如何跳转到返回值的宏/函数内的标签

c - 下面的宏是什么意思?

c - 带参数的宏

无法编译C库

java - 为什么输出会有差异?