知行

__VA_ARGS__

__VA_ARGS__是一个可变参数的宏。

用法

自定义log

1
2
3
4
5
#ifdef DEBUG
#define Log(fmt, ...) NSLog((@"Function:%s, Line:%d " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define Log(fmt, ...)
#endif

#define Log(...)中的...(确省号)代表一个可以变化的参数表。使用__VA_ARGS__把参数传给宏Log##当可变参数宏为空时,可以去除前面的,
调用

1
2
Log(@"Start");
Log(@"This is from %@", NSStringFromSelector(_cmd));

执行一段代码

1
2
3
4
5
6
7
8
#define Lock(...) @synchronized (self) { \
__VA_ARGS__;\
}

// 调用
- (void)setType:(NSInteger)type {
Lock( _type = type; );
}