清理NSLog - 没有时间戳和程序名称

时间:2011-09-22 15:21:17

标签: objective-c c ios nslog

我几乎用这段代码完成了一个干净的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__什么都没有时该怎么办?或者只有在有更多参数时才使用逗号。

1 个答案:

答案 0 :(得分:60)

使用此代码(注意##部分):

#define NSLog(FORMAT, ...) fprintf(stderr, "%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);