我想用C语言编写一个宏,它可以接受任意数量的参数,而不是特定数量的参数
示例:
#define macro( X ) something_complicated( whatever( X ) )
其中X
是任意数量的参数
我需要它,因为whatever
是重载的,可以用2个或4个参数调用。
我尝试定义宏两次,但第二个定义覆盖了第一个定义!
我正在使用的编译器是g++ (更具体地说,是mingw)
发布于 2009-03-25 02:16:28
VC++编译器也支持C99方式。
#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__)
发布于 2011-09-05 05:25:30
__VA_ARGS__
是实现这一目标的标准方法。如果没有必要,不要使用特定于编译器的hack。
我真的很恼火,因为我不能评论最初的帖子。在任何情况下,C++都不是C的超集,用C++编译器编译C代码真的很愚蠢。不要做唐尼不做的事。
发布于 2009-03-25 02:14:47
我不认为这是可能的,你可以用双括号来伪装...只要你不需要单独的参数。
#define macro(ARGS) some_complicated (whatever ARGS)
// ...
macro((a,b,c))
macro((d,e))
https://stackoverflow.com/questions/679979
复制相似问题