我正在使用以下方式确定函数的时间:
#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。
但是,当我使用宏时:
void fun
{
TIME_COST("hello->%s", filePath);
XXXXXX
}
生成的消息始终为hello->(null)
有人可以帮忙吗?
非常感谢!
最佳答案
正确的版本是:
#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
。