我可以在中间而不是结尾使用__VA_ARGS定义可变参数C预处理器宏吗?

前端之家收集整理的这篇文章主要介绍了我可以在中间而不是结尾使用__VA_ARGS定义可变参数C预处理器宏吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我这样做,海湾合作委员会会抱怨:
#define M(obj,met,...,contents) obj##_##met(const void * self,__VA_ARGS__) { \
   contents \
   }

给我这两个理由:

error: missing ')' in macro parameter list
warning: __VA_ARGS__ can only appear in the expansion of a C99 variadic macro

显然,C99样式的可变参数宏在省略号之后立即期望右括号,有效地要求可变参数列表是宏的最后一个参数.我需要它在中间来产生我在上面的宏中描述的速记符号. GCC是否支持功能,使用另一种(非C99)可变参数宏样式?我可以模仿它在其他地方做吗?我不希望最后的变量列表,它会让我的符号混乱.我只能使用GCC.

解决方法

不,你不能. ……必须出现在最后.

但你可以将M定义为

#define M(obj,...) obj##_##met(const void * self,__VA_ARGS__)

并用它作为

void M(foo,bar,int x,char y,double z) {
   content;
}
原文链接:https://www.f2er.com/c/115795.html

猜你在找的C&C++相关文章