Winapi 对OututDebugString的调用是否应该包装在#ifdef DEBUG条件块中?

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

在winbase.h中,我看到以下代码,将
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)。