可变参数宏定义__VA_ARGS__

1)使用VA_ARGS

#define LOG(…) printf (__VA_ARGS__)

#define LOG_ERR(format, …) printf ("[ERR]"format"\n", ##__VA_ARGS__)

#define LOG_ERR(format, …) printf ("[ERR]"format"\n", __VA_ARGS__)   //标准C要求至少带有一个参数,GCC可以不带参数

使用##时可变参数可以为空,不会引起编译错误
__VA_ARGS__在标准C中当变参为空时可能出现编译错误
"##"的作用是对token进行连接,如果token为空,那么不进行连接,所以允许省略可变参数(__VA_ARGS__和args),而不出现编译错误

2)args…

#define LOG(args…) printf (args)

args…是GCC遗留的写法,不建议使用。

猜你喜欢

转载自blog.csdn.net/ambercctv/article/details/80220934
今日推荐