#define IDEBUG(a...)
“(a ...)”是什么意思?
答案 0 :(得分:9)
从链接页面逐字引用:
宏可以被声明为接受可变数量的参数,就像函数一样。定义宏的语法类似于函数的语法。这是一个例子:
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
这种宏叫做可变参数。调用宏时,在最后一个命名参数(此宏没有)之后的参数列表中的所有标记(包括任何逗号)都将成为变量参数。这个令牌序列替换宏体中的标识符 VA_ARGS ,无论它出现在何处。因此,我们有这种扩展:
eprintf ("%s:%d: ", input_file, lineno) ==> fprintf (stderr, "%s:%d: ", input_file, lineno)
对于该特定表格,请在页面中进一步引用:
如果您的宏很复杂,您可能需要一个比
__VA_ARGS__
更具描述性的变量参数名称。 CPP允许这样做,作为扩展。您可以在“...”之前写一个参数名称; 该名称用于变量参数。上面的eprintf宏可以写成#define eprintf(args...) fprintf (stderr, args)
答案 1 :(得分:3)
可变数量的参数。见variadic macros
答案 2 :(得分:3)
这是一个可变的宏。
可变参数宏是一个接受可变数量参数的宏。该功能已在C99中引入。
表格
#define IDEBUG(a...) printf(a)
参数a...
是GNU扩展名,a
为__VA_ARGS__
标识符命名。
标准C99表格将是
#define IDEDBUG(...) printf(__VA_ARGS__)