在MFC C++(Visual Studio 6)中,我习惯于使用TRACE宏进行调试。普通的win32是否有等效的声明?

最佳答案

_RPTn效果很好,尽管不太方便。 Here is some code将MFC TRACE语句重新创建为允许可变数量的参数的函数。还添加了TraceEx宏,该宏在源文件和行号之前加上了前缀,因此您可以单击返回到语句的位置。

更新:CodeGuru上的原始代码无法在Release模式下为我编译,因此我更改了在Release模式下删除TRACE语句的方式。这是我放入Trace.h的完整源代码。感谢Thomas Rizos的原创作品:

// TRACE macro for win32
#ifndef __TRACE_H__850CE873
#define __TRACE_H__850CE873

#include <crtdbg.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>

#ifdef _DEBUG
#define TRACEMAXSTRING  1024

char szBuffer[TRACEMAXSTRING];
inline void TRACE(const char* format,...)
{
    va_list args;
    va_start(args,format);
    int nBuf;
    nBuf = _vsnprintf(szBuffer,
                   TRACEMAXSTRING,
                   format,
                   args);
    va_end(args);

    _RPT0(_CRT_WARN,szBuffer);
}
#define TRACEF _snprintf(szBuffer,TRACEMAXSTRING,"%s(%d): ", \
                &strrchr(__FILE__,'\\')[1],__LINE__); \
                _RPT0(_CRT_WARN,szBuffer); \
                TRACE
#else
// Remove for release mode
#define TRACE  ((void)0)
#define TRACEF ((void)0)
#endif

#endif // __TRACE_H__850CE873

10-06 15:07