Я почти заканчиваю чистую 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__
- это ничто? Или используйте запятую только тогда, когда есть больше аргументов.