Подтвердить что ты не робот

Очистить NSLog - нет метки времени и названия программы

Я почти заканчиваю чистый 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

Теперь нет более грязных журналов!!!

4b9b3361

Ответ 1

Используйте этот код (обратите внимание на часть ##):

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