2016-08-17 3 views
-1

: void dbgLog (tDbgLog *dbg, const char *mod, const char *func, const char *format,...)vsnprintf()의 사용은 다른 함수를 호출하여 액세스 할 수 있도록 할 수 있습니다, 내가 해봤 다음하지만 제대로 작동하지 않는 것 :어떻게하면 args의 동적 숫자가있는 함수를 올바르게 래핑 할 수 있습니까? 나는처럼 보이는 기능 포장 할

void pMonDbgLog(const char *mod, const char *func, char* fmt, ...) 
{ 
    va_list args; 
    va_start(args,fmt); 
    dbgLog(g_pdbg,mod,func,fmt,args); 
    va_end(args); 
} 

그리고 나는 다시 다음 매크로를 통해 이것을 접근 가능하게 만든다 : #define gDbgLog(fmt,...) pMonDbgLog(MODULE_NAME,__FUNCTION__,fmt, ##__VA_ARGS__)하지만 내 주장이 엉망진창이된다. 왜 이래서 궁금해하니?

답변

0

vararg 함수의 인수를 다른 vararg 함수에 전달할 수있는 이식성이 없습니다. 당신은 정의 된 함수 vdbgLog 호출하여 dbgLog을 구현할 수 있습니다

void vdbgLog(tDbgLog *dbg, const char *mod, const char *func, 
      const char *format, va_list ap) { 
    /* your implementation goes here */ 
} 

void dbgLog(tDbgLog *dbg, const char *mod, const char *func, const char *fmt, ...) { 
    va_list args; 
    va_start(args, fmt); 
    vdbgLog(dbg, mod, func, fmt, args); 
    va_end(args); 
} 

을 그리고 당신은뿐만 아니라 pMonDbgLog에서 직접이 기능 vdbgLog를 호출 할 수

void pMonDbgLog(const char *mod, const char *func, char *fmt, ...) { 
    va_list args; 
    va_start(args, fmt); 
    vdbgLog(g_pdbg, mod, func, fmt, args); 
    va_end(args); 
} 
3

함수 dbgLog는 생략을 통해 va_list 형이 아닌 가변 인수의 인수를해야합니다

void dbgLog(tDbgLog*dbg, const char *mod, const char *func, const char *format, va_list list) 
                       ^^^^^^^ 

인수 목록을 함수 dbgLog에, 다음 vsnprintf을 함수에 전달됩니다.