通常,当我需要在Windows中进行调试输出时,我使用以下C代码段:
#ifdef _DEBUG
#define DBGPRINT( kwszDebugFormatString, ... ) \
{ \
wprintf_s( L"[%s:%d] ", __FUNCTIONW__, __LINE__ ); \
wprintf_s( kwszDebugFormatString, __VA_ARGS__ ); \
}
#else
#define DBGPRINT( kwszDebugFormatString, ...) ;;
#endif
Run Code Online (Sandbox Code Playgroud)
我想重新编码使用OutputDebugString不接受格式字符串.我认为静态地在堆栈上分配一个小数组(例如WCHAR wszBuf[100] = {0};)有些粗糙,因为它可能消耗比分配的内存更多或更少的内存,并截断输出或浪费内存.我编写了以下代码来解决所有这些问题,但我担心因为宏有点大.
#ifdef _DEBUG
#define DBGPRINT( kwszDebugFormatString, ... ) \
{ \
INT iLineNumber = __LINE__; \
FILE *fileNul = NULL; \
INT cbFormatString = 0; \
PWCHAR wszDebugString = NULL; \
size_t st_Offset = 0; \
\
/* Determine the number of …Run Code Online (Sandbox Code Playgroud) c debugging winapi visual-studio-debugging visual-studio-macros