5

有没有办法#define使用可变长度参数的宏?

#define CALL(ar1, ar2, ar3)
do something
#endif

在 C 代码中

CALL(0);
CALL(0,1);
CALL(0,1,2)

都调用上面的 CALL 宏。如果没有使用 ar2, ar3,预处理器只是忽略带有 ar2 或 ar3 的行。

4

1 回答 1

6

是的,看看这个: http: //gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html

关键字是__VA_ARGS__(可变参数宏):

可以像函数一样声明宏来接受可变数量的参数。定义宏的语法类似于函数的语法。这是一个例子:

 #define eprintf(...) fprintf (stderr, __VA_ARGS__)
于 2013-02-07T19:58:56.180 回答