我想写一个宏在C接受任何数量的参数,而不是一个特定的数字
例子:
#define macro( X ) something_complicated( whatever( X ) )
其中X是任意数量的参数
我需要这个,因为无论什么重载,可以用2或4个参数调用。
我尝试了两次定义宏,但是第二次定义覆盖了第一次定义!
我正在使用的编译器是g++(更具体地说,mingw)
我想写一个宏在C接受任何数量的参数,而不是一个特定的数字
例子:
#define macro( X ) something_complicated( whatever( X ) )
其中X是任意数量的参数
我需要这个,因为无论什么重载,可以用2或4个参数调用。
我尝试了两次定义宏,但是第二次定义覆盖了第一次定义!
我正在使用的编译器是g++(更具体地说,mingw)
当前回答
我认为这是不可能的,你可以用双pares来假装……只要你不需要单独的参数。
#define macro(ARGS) some_complicated (whatever ARGS)
// ...
macro((a, b, c))
macro((d, e))
其他回答
虽然它是C99的一部分,所以应该适用于所有人
http://www.delorie.com/gnu/docs/gcc/gcc_44.html
简单的例子:
#define debug(format, args...) fprintf (stderr, format, args)
变量数量用省略号(…)表示。 ISO C语法要求在“…”之前至少有一个固定参数。
例如,你可以输入:
#define DEBUGMSG ( int, ...)
C99方式,也支持vc++编译器。
#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__)
__VA_ARGS__是标准的方法。如果没有必要,不要使用特定于编译器的技巧。
我真的很生气,因为我不能评论原来的帖子。在任何情况下,c++都不是C的超集。用c++编译器编译C代码真的很愚蠢。不要做唐尼不做的事。
我认为这是不可能的,你可以用双pares来假装……只要你不需要单独的参数。
#define macro(ARGS) some_complicated (whatever ARGS)
// ...
macro((a, b, c))
macro((d, e))