2014-10-25 4 views
0

printf()가 C++ 응용 프로그램의 로그 함수를 호출하는 것처럼 허용하려고합니다. 나는 내가하고 싶은 것을 거의 설명하는 this reference을 발견했다. 그러나, 내 운이 없었어요 내 애플 리케이션에서 원하는대로 작동하도록 개념을 받고. 내가 문제를 설명 할 수있는 최소한의 프로그램을 얻을 수있을 때까지 그것을 축소하고 여기있다 :C++의 Variadic 매크로가 예상대로 작동하지 않습니다.

#include <stdarg.h> 
#include <stdio.h> 
#define logEvent(severity, TAG, fmt, ...) _log_proxy(severity, TAG, fmt"\n", ##__VA_ARGS__) 
#define log_level_t int 


void _log_proxy(log_level_t severity, const char * TAG, const char *fmt, ...) 
     __attribute__((format (printf, 3, 4))); 

int main (int argc, const char * argv[]) { 
    logEvent(1, "TAG", "This is plain text."); 
    logEvent(1, "TAG", "This is a number: %d.", 12); 
    logEvent(1, "TAG", "This is a string: %s.", "heebiejeebie"); 
    return 0; 
} 

void _log_proxy(log_level_t severity, const char * TAG, const char *fmt, ...) { 
    va_list arg; 
    va_start(arg, fmt); 
    printf(fmt, arg); 
    va_end(arg); 
} 

나는 형식 문자열에 대한 인수가의 printf() 호출의 횡설수설로 인쇄되는 것을 찾을 수 있습니다. 나는 내가 아주 단순한 일을하고 있다는 것을 확신한다. 나는 그 단순한 것이 무엇인지 모른다. 어떤 도움을 주시면 감사하겠습니다.

+0

'_log_proxy'는 [예약 된 식별자] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier)입니다. – chris

답변

4

printf()을 으로 바꾸고 매개 변수를 사용하십시오.

printf(char* string , ...) 

vprintf(char* string , va_list list) 
2

vprintf이 아닌 printf으로 전화를 걸고 싶습니다.

printfva_list을 하나의 인수로 해석하여 횡설수설 (또는 다른 정의되지 않은 동작)을 인쇄합니다.

관련 문제