C++中实现MFC风格的TRACE
#include <Windows.h>
#ifdef _DEBUG
void myTrace(const char *format, ...)
{
char msg[1024] = { 0 };
va_list pArgList;
va_start(pArgList, format);
vsprintf_s(msg, format, pArgList);
va_end(pArgList);
OutputDebugStringA(msg);
}
#define TRACE myTrace
#else
#define TRACE
#endif
关键点:字符串格式化必须使用“vsprintf_s”,而不能使用“sprintf_s",“sprintf_s"的第三个参数是”...“,而不是va_list,编译不错错,但是会导致无法正确格式化数据,堆栈的地址也不对,可能导致崩溃。