在C语言参数宏展开的过程中,用define定义了函数
#define Log(format,...) _Log(ANST_FMT("[%s:%d %s] " format, ANSI_FG_BLUE) "\n", \ __FILE__, __LINE__, __func__, ## __VA_ARGS__)
在这一宏展开之中,省略号表示原有函数可继续展开的其他各项可能的输入参数,可以随意扩展。
在展开之后的函数中,可以用__VA_ARGS__表示原有函数中省略号代表的部分。
另外,使用##可以提示编译器此处注意逗号的符号区分。
例如:
#define Assert(cond,format,...) \ do { \
if (!(cond)) {
\
printf("%s:%s:%s:%s",format,##__VA_ARGS__);\
assert_fail_msg();\
assert(cond);\
} \
} while (0)
在上述代码中,省略号代表可以随意扩展的进一步部分。__VA_ARGS__代表原有被省略的部分秽土转生后被提取出来的内容。