我想使用一个Macro多参数总是空的跟踪日志。问题c ++窗口 [英] I want to trace logs using a Macro multi parameter always null. problem c++ windows
本文介绍了我想使用一个Macro多参数总是空的跟踪日志。问题c ++窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用以下方式来描述函数的时间:
I am using the following way to cout a function's time:
#define TIME_COST(message, ...)\
char szMessageBuffer[2048] = {0};\
va_list ArgList;\
va_start(ArgList, message);\
vsprintf_s(szMessageBuffer, 2048, message, ArgList);\
va_end(ArgList); \
string strMessage(szMessageBuffer);\
CQLogTimer t(strMessage);
// CQLogTimer是一个自解构函数,它将自己编译生命时间并打印szMessageBuffer。
但是当我使用宏时:
// CQLogTimer is a self destructor,which will cout life time of its own and print szMessageBuffer. However when I use the macro this :
void fun
{
TIME_COST("hello->%s", filePath);
XXXXXX
}
生成的消息总是hello - >
The message generated always is hello->(null)
可以帮助吗?
非常感谢!
Can Any one help? Many thanks!
推荐答案
正确的版本是:
#define TIME_COST(message, ...)\
char szMessageBuffer[2048] = {0};\
sprintf_s(szMessageBuffer, 2048, message, __VA_ARGS__);\
string strMessage(szMessageBuffer);\
CQLogTimer t(strMessage);
__ VA_ARGS __
不是 va_list
类型,但是以逗号分隔的参数,因此您需要使用 sprintf_s
,而不是 vsprintf_s
。
__VA_ARGS__
is not va_list
type, but comma-separated arguments, so you need to use sprintf_s
, not vsprintf_s
.
这篇关于我想使用一个Macro多参数总是空的跟踪日志。问题c ++窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文