我想使用一个Macro多参数总是空的跟踪日志。问题c ++窗口 [英] I want to trace logs using a Macro multi parameter always null. problem c++ windows

查看:197
本文介绍了我想使用一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆