23
나는 거의이 코드와 깨끗한 NSLog를 마무리 타임 스탬프 및 프로그램 이름 : 내가 할 경우청소 NSLog -
는#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, __VA_ARGS__] UTF8String]);
이 잘 작동이 :
NSLog(@"Show %@ message", @"this");
하지만, 실패 할 경우 I 사용자 그것은
NSLog(@"One argument");
때문에 __VA_ARGS__
은 아무것도 아니다, 그래서
printf("%s\n", [[NSString stringWithFormat:@"One argument",] UTF8String]);
문제는 쉼표입니다. 이것이 매크로이므로 __VA_ARGS__
은 아무 것도 아닙니다. 그래서 나는 을 생성하고 실패 할 것이므로 __VA_ARGS__==nil
과 같은 일을 할 수 없습니다.
질문은 간단합니다. __VA_ARGS__
이 아무것도 아닌 경우 어떻게해야합니까? 또는 더 많은 인수가있을 때만 쉼표를 사용하십시오.
- 편집 -
쉬이 셰가 문제를 해결합니다. 최상의 코드가 되려면 다음과 같이 사용하십시오.
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(...)
#endif
이제 더 이상 지저분한 로그가 없습니다 !!!
작업 벌금을. 나는'##'이'__VA_ARGS__'와는 아무런 의미가 없지만 일한다고 생각했습니다. – Rodrigo
printf ("% s \ n"을 fprintf (stderr, "% s \ n")로 변경해야합니다. 여러 가지 이유로, 가장 중요한 것은 printf가 캐시 된 stout으로 가고, stderr은 캐시되지 않고 바로 출력됩니다 –
Hum .. @ Nathan Day. 이런 것들을보고 이해하지 못했지만, 상황이 나아 졌다면 나는 사용할 것이다 : – Rodrigo