Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
507 views
in Technique[技术] by (71.8m points)

objective c - Clean NSLog - No timestamp and program name

I almost finishing a clean NSLog with this code:

#define NSLog(FORMAT, ...) printf("%s
", [[NSString stringWithFormat:FORMAT, __VA_ARGS__] UTF8String]);

This work fine if I do this:

 NSLog(@"Show %@ message", @"this");

But, will fail if I user it

 NSLog(@"One argument");

because __VA_ARGS__ is nothing, so it produce

 printf("%s
", [[NSString stringWithFormat:@"One argument",] UTF8String]);

So, the problem is the comma. Because this is macro, __VA_ARGS__ is nothing. So I can't do things like __VA_ARGS__==nil because will produce ==nil and will fail.

The question is simple: What to do when __VA_ARGS__ is nothing? Or only use comma when have more arguments.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use this code (notice the ## part):

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...