我正在使用以下方式确定函数的时间:

#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

07-24 09:21