我几乎用这段代码完成了一个干净的NSLog:
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, __VA_ARGS__] UTF8String]);
如果我这样做,这项工作很好:
NSLog(@"Show %@ message", @"this");
但是,如果我使用它将会失败
NSLog(@"One argument");
因为__VA_ARGS__
没什么,所以产生了
printf("%s\n", [[NSString stringWithFormat:@"One argument",] UTF8String]);
所以,问题是逗号。因为这是宏,__VA_ARGS__
不算什么。所以我不能做__VA_ARGS__==nil
之类的事情因为会产生==nil
并且会失败。
问题很简单:当__VA_ARGS__
什么都没有时该怎么办?或者只有在有更多参数时才使用逗号。
答案 0 :(得分:60)
使用此代码(注意##
部分):
#define NSLog(FORMAT, ...) fprintf(stderr, "%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);