__VA_ARGS__ : 可变参数的宏,可以是零个或多个参数。类似可变参数中的三个省略号
#__VA_ARGS__ : 把宏参数变为一个字符串
##__VA_ARGS__ : 当可变参数为零个时,这里的##起到把前面多余的","去掉的作用,否则会编译出错
#define ac(format, ...) printf(format, ##__VA_ARGS__)
ac("%s: %d\r\n", "ac", 120);
如果__VA_ARGS__不带##, ac("ac"),会扩展成 printf("ac",),末尾多了个逗号,编译会报错;使用##__VA_ARGS__ 代替__VA_ARGS__ ,## 可以提示编译器,把多余的逗号删除。
gcc编译器版本不支持__VA_ARGS__宏怎么办?
用回原先的 ... 即可。