I almost finishing a clean NSLog with this code:
#define NSLog(FORMAT, ...) printf("%s\n", [[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\n", [[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.
Use this code (notice the ##
part):
#define NSLog(FORMAT, ...) fprintf(stderr, "%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);