__VA_ARGS__
看别人的源代码的时候会看到这样的宏定义
#define LOGWARN(xx, ...) NSLog(@"<WARN>: " xx, ##__VA_ARGS__)
... 匹配 __VA_ARGS__这个可变参数。 前面添加了## 是为了应对这样调用的情况: LOGWARN(@"sdfd") 没有格式输入,最终宏替换为NSLog(@"sdfd",)。为了去掉括号里面的那个逗号在__VA_ARGS__前增加 ##
另外
NSLog(@"nihao "@" hello world"); 这个的输出是 nihao hello world
# 与 ##的区别
# 是给宏添加双引号
## 用作连接