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

时间:2014-04-03 15:48:57

标签: winapi visual-c++

在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

1 个答案:

答案 0 :(得分:3)

通常我们会这样做:

#if defined (DEBUG) | defined (_DEBUG)
#define DebugOutput(x) OutputDebugString(x)
#else
#define DebugOutput(x)
#endif

DebugOutput将在发布模式下扩展为空,保持发布二进制文件清洁,代码中无处#idfef / #endif

请注意,最好还要检查编译器是否为MSVC(_MSC_VER),这样您的代码可以更加轻松