这个#define语法是什么意思?

per*_*ill 3 c c-preprocessor

我遇到过这一个,不明白.

#define IDEBUG(a...)  
Run Code Online (Sandbox Code Playgroud)

"(a ......)"是什么意思?

Sha*_*hin 9

这是一个可变的宏.

从链接页面逐字引用:

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

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

这种宏叫做可变参数.调用宏时,在最后一个命名参数(此宏没有)之后的参数列表中的所有标记(包括任何逗号)都将成为变量参数.这个令牌序列替换宏体中出现的标识符VA_ARGS.因此,我们有这个扩展:

 eprintf ("%s:%d: ", input_file, lineno)
      ==>  fprintf (stderr, "%s:%d: ", input_file, lineno)
Run Code Online (Sandbox Code Playgroud)

对于该特定形式,请在页面中进一步引用:

如果您的宏很复杂,您可能需要一个更具描述性的变量参数名称__VA_ARGS__.CPP允许这作为扩展.您可以在"..."之前写一个参数名称; 该名称用于变量参数.可以编写上面的eprintf宏

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