具有可变长度参数的宏

ric*_*ard 4 c gcc

有一种方法可以#define使用可变长度参数的宏吗?

#define CALL(ar1, ar2, ar3)
do something
#endif
Run Code Online (Sandbox Code Playgroud)

在C代码中

CALL(0);
CALL(0,1);
CALL(0,1,2)
Run Code Online (Sandbox Code Playgroud)

all调用上面的CALL宏.如果未使用ar2,ar3,则预处理器只会忽略ar2或ar3的行.

duD*_*uDE 5

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

关键词是__VA_ARGS__(Variadic Macros):

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

 #define eprintf(...) fprintf (stderr, __VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)