Ich beende fast ein sauberes NSLog mit diesem Code:
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, __VA_ARGS__] UTF8String]);
Das funktioniert gut, wenn ich das mache:
NSLog(@"Show %@ message", @"this");
Aber, wird fehlschlagen, wenn ich es benutze
NSLog(@"One argument");
Weil __VA_ARGS__
ist nichts, also erzeuge es
printf("%s\n", [[NSString stringWithFormat:@"One argument",] UTF8String]);
Das Problem ist also das Komma. Da dies ein Makro ist, __VA_ARGS__
ist nichts. Also kann ich sowas nicht machen __VA_ARGS__==nil
weil produzieren wird ==nil
und wird scheitern.
Die Frage ist einfach: Was ist wann zu tun __VA_ARGS__
ist nichts? Oder verwenden Sie nur Kommas, wenn Sie mehr Argumente haben.