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

Fel*_*bek 37 c++ compilation visual-studio-2010 visual-studio

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

#define DEBUG
...
#ifdef DEBUG
    std::cout << "[RE_words] " << m_re << std::endl;
#endif
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*cek 69

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

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

另请参阅:
此答案更详细地解释了_DEBUG和NDEBUG之间的差异.
这个答案解释了NDEBUG符号的用途以及它是否由标准定义.

  • 顺便提一下,NDEBUG是便携式解决方案.遗憾的是,DEBUG构建不存在标准符号. (8认同)

Moo*_*ice 8

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


小智 5

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

在项目属性页Configuration Properties\C/C++\Code Generation上,为运行时库选择的选项会影响多个定义。选择调试库(/MTd/MDd)时,会设置_DEBUG定义。

有关交换机的详细信息,请参阅MSDN /MD、/MT ...。有几个#define是根据这些选项设置的。当你在包含任何头文件之前试图找到谁设置了 #define 时,它​​们是非常不可见的!