2013-02-07 99 views
4

有没有一种方法来#define宏可变长度参数?具有可变长度参数的宏

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

在C代码

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

所有调用上述CALL宏。如果没有使用ar2,ar3,则预处理器会忽略ar2或ar3的行。

+2

请在搜索之前先搜索一下,或者只是在我最喜欢的搜索引擎中放入“可变长参数的宏”会带来很多结果。 –

回答

5

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

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

宏可以声明为接受可变数量的参数就像一个功能。定义宏的语法与函数的语法相似。下面是一个例子:

#define eprintf(...) fprintf (stderr, __VA_ARGS__) 
+0

我读过这个。这不是我想要的。这要求宏体具有采用__VA_ARGS__的函数。 – richard