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