- ##args
#define xxx_log(fmt, args...) printf(fmt,##args)
"args..." 被看作是一个字符串, ##的作用是在预编译时,连接"args..." 这个token, 如果args... 为空, 会去除 "args..." 之前的逗号
- __VA_ARGS__
#define xxx_log(fmt, ...) printf(fmt,##__VA_ARGS__)
__VA_ARGS__ 代替 "..." 动态变参.
- define __str(x) #x
__str(x) <==> "x" 把参数x字符串化,并加上引号,成为一个常量字符串