Winapi 对OututDebugString的调用是否应该包装在#ifdef DEBUG条件块中?
在winbase.h中,我看到以下代码,将Winapi 对OututDebugString的调用是否应该包装在#ifdef DEBUG条件块中?,winapi,visual-c++,Winapi,Visual C++,在winbase.h中,我看到以下代码,将OutputDebugStringA/W标记为过程而不是条件宏。这是否意味着最好将对这些过程的调用封装在只调试的条件块中,以保持生产代码的紧凑性,特别是在紧凑循环中 WINBASEAPI VOID WINAPI OutputDebugStringA( __in LPCSTR lpOutputString ); WINBASEAPI VOID WINAPI OutputDebugStringW( __in LPCWSTR lpOut
OutputDebugStringA/W
标记为过程而不是条件宏。这是否意味着最好将对这些过程的调用封装在只调试的条件块中,以保持生产代码的紧凑性,特别是在紧凑循环中
WINBASEAPI
VOID
WINAPI
OutputDebugStringA(
__in LPCSTR lpOutputString
);
WINBASEAPI
VOID
WINAPI
OutputDebugStringW(
__in LPCWSTR lpOutputString
);
#ifdef UNICODE
#define OutputDebugString OutputDebugStringW
#else
#define OutputDebugString OutputDebugStringA
#endif // !UNICODE
通常我们会这样做:
#if defined (DEBUG) | defined (_DEBUG)
#define DebugOutput(x) OutputDebugString(x)
#else
#define DebugOutput(x)
#endif
DebugOutput
将在发布模式下扩展为零,保持发布二进制文件干净,代码中的任何地方都没有#idfef
/#endif
请注意,检查编译器是否为MSVC也是一个好主意(
\u MSC\u VER
),这样您的代码可以更具可移植性检查编译器是否为MSVC意味着什么OutputDebugString
在内核32中的Windows API函数中。@MicroVirus我想我的意思是,您最好检查当前平台上是否有可用的OutputDebugString
。我从未在Windows上的其他编译器(和IDE)中使用过它(而是使用stderr
)。你认为有比\u MSC\u VER
更好的变量来检查吗?好吧,如果你包括windows.h
,那么它是可用的,你使用哪种编译器并不重要(只要它可以针对windows)。您是对的:\u MSC\u VER
是检查Visual Studio的正确变量,但检查它并不等同于检查您是否针对windows(例如,MinGW)。