我有以下功能,我不应该更改为不破坏依赖项
void Trace(
__in DbgInfo dbgInfo,
__in_z _Printf_format_string_ const WCHAR* pwszMsgFormat,
...) {
// some code I need
};
我需要它来调用一个也有...
args:
#define TRACE_LINE( format, ... ) _TRACE( LogLevelInfo ,format, __VA_ARGS__ )
#define _TRACE( mask, format, ... ) \
((mask) & g_LogLevel) \
? TraceGlobal::TraceLine( mask, L"[" __FILEW__ L":" _BLOB_WIDE(_BLOB_STRINGIZE(__LINE__)) L"] " L"MyService!" __FUNCTIONW__ L": " format , __VA_ARGS__ ) \
: (void)0
void
ServiceTracing::TraceGlobal::TraceLine(
_In_ LogLevel level,
_In_z_ PCWSTR format,
_In_ ...)
/**
Routine Description:
Trace a formatted line with Level tracing
Arguments:
level: enum level of trace line
format: the string format
...: the variable arguments to be formatted
Return value:
None
**/
{
ASSERT(format);
va_list args;
va_start(args, format);
// code does tracing
va_end(args);
}
我该怎么做?
在上面的主要Trace功能中,我尝试了这个:
TRACE_LINE( pwszMsgFormat, __VA_ARGS__ );
然而,这没有用,我收到了错误:
syntax error : missing ')' before identifier 'pwszMsgFormat'
error C2059: syntax error : ')'
我假设因为它是宏__VA_ARGS__
它给出了这个错误。
另一方面,我尝试直接调用TraceGlobal
va_list args;
va_start(args, pwszMsgFormat);
TraceGlobal::TraceLine(LogLevelInfo, pwszMsgFormat , args );
va_end(args);
这构建正常,但我在跟踪功能中遇到了分段错误/访问冲突,因为我还初始化va_list
并使用va_start
中的TraceLine
有没有一种简单的方法可以将变量参数从函数传递给另一个。我不想将Trace函数更改为Macro。