【发布时间】:2011-10-10 06:56:15
【问题描述】:
Visual Studio 2008 中 vc++ 中的 DEBUG 和 _DEBUG 有什么区别。有什么区别吗,因为在我的项目中,在某些模块预处理器中是 DEBUG,而在某些模块中是 _DEBUG。
【问题讨论】:
标签: visual-studio-2008 visual-c++
Visual Studio 2008 中 vc++ 中的 DEBUG 和 _DEBUG 有什么区别。有什么区别吗,因为在我的项目中,在某些模块预处理器中是 DEBUG,而在某些模块中是 _DEBUG。
【问题讨论】:
标签: visual-studio-2008 visual-c++
在您自己的代码中,您可以检查您想要的任何宏,因此使用哪个宏并不重要。
但是您使用的库的行为可能会有所不同。例如。关于 assert 的 MSDN 文档指出:
断言语句仅在定义 _DEBUG 时编译。 _DEBUG 未定义时,编译器将断言视为空语句。
所以我建议始终使用_DEBUG。
编辑:根据MSDN,您甚至不必定义任何特殊的调试宏,因为一旦您指定了调试运行时库,编译器就会为您完成。
【讨论】:
这实际上取决于定义的宏使用。据我所知,默认的 VS2008 C++ 项目包含要为调试配置定义的 _DEBUG。可能会发生在您的项目中也定义了自定义 DEBUG 宏。尝试搜索 DEBUG 定义。
默认情况下,您应该始终使用 _DEBUG。
【讨论】:
如果项目的Codegeneration-setting是任何带有“debug”的东西,那么_DEBUG宏是由编译器定义的。 相应的编译器选项是 /MDd 多线程 DLL,动态链接到 libc,调试 /MLd 与 libc、DEBUG (VC6) 的单线程静态链接 /MTd 多线程、静态链接到 libc、DEBUG
编译器选项 /LDd 也定义了 _DEBUG 宏。
DEBUG 宏通常在 Debug-Project-Setting 中明确定义。
【讨论】: