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

Rod*_*igo 26 c objective-c nslog ios

我几乎用这段代码完成了一个干净的NSLog:

#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, __VA_ARGS__] UTF8String]);
Run Code Online (Sandbox Code Playgroud)

如果我这样做,这工作正常:

 NSLog(@"Show %@ message", @"this");
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用它将会失败

 NSLog(@"One argument");
Run Code Online (Sandbox Code Playgroud)

因为__VA_ARGS__什么都没有,所以它产生了

 printf("%s\n", [[NSString stringWithFormat:@"One argument",] UTF8String]);
Run Code Online (Sandbox Code Playgroud)

所以,问题是逗号.因为这是宏,__VA_ARGS__没什么.所以我不能做__VA_ARGS__==nil因为会产生==nil而且会失败的事情.

问题很简单:什么时候__VA_ARGS__什么都不做?或者只有在有更多参数时才使用逗号.

xuz*_*zhe 60

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

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

  • 您应该的printf("%S\N"改为fprintf中(错误,"%S \n",虽然,由于各种原因,最重要的是,printf的去粗壮其缓存,标准错误没有被缓存出来的输出,立竿见影. (4认同)