参考文章:https://blog.csdn.net/u013073067/article/details/125356313
##__VA_ARGS__前面加上##的作用是:当可变参数的个数为0时,这里的##可以把把前面多余的","去掉,否则会编译出错。
在linux内核中随处可见这种宏定义的用法
#include <stdio.h>#define LOG3(fmt, ...) printf("<%s:%s>:"fmt"\r\n", __FILE__, __FUNCTION__, ##__VA_ARGS__)
int main(int argc, char** argv)
{char *str = "test __VA_ARGS__";int num = 10086;LOG3("this is test __VA_ARGS__");LOG3("this is test __VA_ARGS__:%s, %d", str, num);LOG3();return 0;
}