2016-08-17 100 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

沒有可移植的方式將可變參數函數的參數傳遞給另一個可變參數函數。你可以通過調用定義爲一個功能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。

相關問題