我碰到这个,不明白。

#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)

09-28 06:10