我碰到这个,不明白。
#define IDEBUG(a...)
(a…)是什么意思?
最佳答案
那是一个variadic macro。
从链接页面逐字引用:
宏可以声明为像函数一样接受可变数量的参数。定义宏的语法与函数的语法类似。下面是一个例子:
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
这种宏称为variadic。调用宏时,其参数列表中最后一个命名参数(此宏没有)后面的所有标记(包括任何逗号)都将成为变量参数。此标记序列替换宏体中出现的标识符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)