객관적인 C 가변 인수 함수에 대한 명확한 아이디어가 없습니다. nlsog 형식의 매개 변수를 사용하는 함수를 작성하려고하지만 언젠가는 그 함수 내부에서 NSLog를 사용해야합니다. 어떻게해야합니까?가변 인수 함수 내 NSLog
-(void) printStatus:(NSString*)status, ...
{
// I want use use NSLog with all these parameter here.
// some gui logging also happens here
}
통화
[self printStatus:@"status"];
또는
대신 NSLog를 사용[self printStatus:@"Staus: %@", someObject];
, 나는 printStatus를 사용하려면, 다음과 같이 될 것입니다. 콘솔 로깅을 GUI 로깅으로 전환해야 할 때 printStatus 함수 만 변경하여 코드 내의 모든 부분을 변경하지 않아도됩니다.
아니면 내가 여기에서 사용하고 같은 DLOG를 사용
,#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
# define DLog(...) /* */
#endif
. 하지만 NSLog를 사용하는 곳에서 DLog 매크로를 사용하고있었습니다. NSLog를 사용할 방법이 있습니까? #defdef DEBUG # define DLog (fmt, ...) NSLog ((@ "% s [행 % d]"fmt), __PRETTY_FUNCTION__, __LINE__, ## __ VA_ARGS__) #else # define DLog/* */ #endif – karim
함수/메소드에서 변수 인수를 전달하는 유일한 방법은'va_list '를 사용하는 것입니다. 이것이 대부분의 라이브러리가'va_list '를 허용하는'* v' 대안을 제공하는 이유입니다. 그러므로'NSLogv'를 호출하는'DLogv' 파일을 생성하고 그 파일에 인수를 전달해야합니다. –
감사. 제 2의 경우를 생각하고있었습니다. 그러나 나는 첫 번째 사건을 확신하지 못했습니다. 두 번째 경우에 문자열을 만들 때부터 va_start (args, status)를 호출해야합니다. 그렇지 않으면 argString이 NSString과 함께 사용되지 않습니다. 그거 아니야? – karim