我想使用与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/

10-11 23:07