根据Visual Studio中的Debug / Release配置自动#defines

时间:2011-01-05 13:03:32

标签: c++ visual-studio visual-studio-2010 compilation

我的程序中有调试输出,如下所示:

#define DEBUG
...
#ifdef DEBUG
    std::cout << "[RE_words] " << m_re << std::endl;
#endif

DEBUG在我的程序中手动定义。当我发布版本时,我总是注意到这一行。在Visual Studio中,还有 Debug vs Release 版本的配置,这些版本处理用于编译的命令行等。我是否还可以使用配置“调试”自动为编译器定义DEBUG?怎么样?

4 个答案:

答案 0 :(得分:66)

Visual Studio自动为Debug版本定义_DEBUG符号(对于非调试版本,定义NDEBUG)。

另一种方法是转到项目设置 - &gt;配置属性 - &gt; C / C ++ - &gt;预处理器,并手动编辑预处理器定义。

另见:
This answer更详细地解释了_DEBUG和NDEBUG之间的区别 This answer解释了NDEBUG符号的用途以及它是否由标准定义。

答案 1 :(得分:8)

使用_DEBUG。 Visual C ++为Debug配置定义了这个。在项目的属性对话框中查看Debug Configuration的预处理程序指令。

答案 2 :(得分:3)

我也以为我只需查看预处理器属性并删除_DEBUG。如果您选择其中一个调试运行时库选项,Visual Studio将尝试通过设置_DEBUG来提供帮助。

在项目属性页配置属性\ C / C ++ \代码生成中,为运行时库选择的选项会影响多个定义。选择调试库( / MTd / MDd )时, _DEBUG 定义 集。

参见MSDN /MD, /MT ... 有关开关的更多信息。根据这些选项设置了几个#define。当你甚至在包含任何头文件之前试图找到谁设置#define时,它们是非常不可见的!

答案 3 :(得分:0)

是的,您应该检查项目选项页面,编译 - >高级编译选项。 但是,默认情况下,VS会自动为调试模式定义DEBUG指令。