【发布时间】:2016-08-12 21:14:50
【问题描述】:
我需要包装一个宏,以便可以使用函数访问它。 宏定义如下:
#define gDbgLog(fmt,...) dbgLog(g_pdbg,MODULE_NAME,__FUNCTION__,fmt,##__VA_ARGS__)
我试图把它总结为:
void pMonDbgLog(char* fmt, ...)
{
va_list args;
va_start(args,fmt);
gDbgLog(fmt,args);
va_end(args);
}
虽然fmt 似乎很好,但参数 (int) 似乎被破坏了。我这样称呼它:
int x = 51144;
pMonDbgLog("some text %d",x);
我得到的是 "some text 642129608",而像DbgLog("some text %d",x); 这样直接调用宏可以正常工作。这是为什么呢?
dbgLog() 包装 vsnprintf() 以生成输出。
【问题讨论】:
-
对于您的示例用法,您可以直接调用宏,即
gDbgLog("some text %d",x);。为什么你认为你需要一个函数包装器?
标签: c arguments variadic-functions variadic-macros