我想使用与printf
相同的参数来制作调试日志记录功能。但是可以在优化的构建过程中由预处理器删除。
例如:
Debug_Print("Warning: value %d > 3!\n", value);
我看过可变参数宏,但并非在所有平台上都可用。
gcc
支持它们,而msvc
不支持。 最佳答案
我仍然采用旧方法,方法是定义一个宏(下面的XTRACE),该宏与无操作或带有可变参数列表的函数调用相关。在内部,调用vsnprintf,以便您可以保留printf语法:
#include <stdio.h>
void XTrace0(LPCTSTR lpszText)
{
::OutputDebugString(lpszText);
}
void XTrace(LPCTSTR lpszFormat, ...)
{
va_list args;
va_start(args, lpszFormat);
int nBuf;
TCHAR szBuffer[512]; // get rid of this hard-coded buffer
nBuf = _vsnprintf(szBuffer, 511, lpszFormat, args);
::OutputDebugString(szBuffer);
va_end(args);
}
然后是典型的#ifdef开关:
#ifdef _DEBUG
#define XTRACE XTrace
#else
#define XTRACE
#endif
好了,可以清理很多,但这是基本思想。
关于c++ - 如何创建带有可变参数列表的仅调试函数?就像printf(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15240/