Я почти заканчиваю чистый 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__
ничего? Или используйте запятую, когда у вас больше аргументов.
- Изменить -
Xuzhe решить проблему! Чтобы быть лучшим кодом, можете использовать его следующим образом:
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(...)
#endif
Теперь нет более грязных журналов!!!