在Visual Studio 2015中定义的NDEBUG和_DEBUG在哪里?

时间:2015-10-15 14:28:13

标签: c++ visual-studio visual-studio-2010 visual-studio-2015 assert

我可以转到默认Visual Studio 2010项目的设置,并查看“配置属性”>>“C / C ++”>>“预处理器”中定义的NDEBUG_DEBUG “的”预处理器定义“: Visual Studio 2010 Project Settings

如果我转到默认Visual Studio 2015项目的设置“预处理器定义”为空! Visual Studio 2015 Project Settings

我甚至在Visual Studio 2015 .vcxproj中都没有看到NDEBUG_DEBUG。我知道它已被正确定义,因为assert(false)仅在Debug配置中触发。微软在Visual Studio 2015中将这些定义放在哪里?我可以修改它们,还是从我那里取出它?

修改 Niall's answer是正确的。我不明白的是,如果在Release配置中触发assert,则assert会发生不同的情况。该程序不会弹出system("pause")对话框,但它也不会执行void main() { assert(false); system("pause"); }

assert

相反,当我在Visual Studio的Release配置中运行它时,我看到控制台窗口弹出并立即关闭,所以我假设 assert没有触发因为我没有查看assert对话框。 然而如果我从终端运行已编译的Release可执行文件,它会立即结束,但是它会输出:

  

断言失败:false,文件temp.cpp,第9行

因此断言在发布配置中触发,它不会弹出NDEBUG对话框。这意味着{{1}}实际上不是被定义。

1 个答案:

答案 0 :(得分:3)

通常这些被定义为附加预处理器定义/选项的一部分,并最终通过/D选项开关登陆命令行。

根据项目配置,它们可以从父属性文件继承,因此可能无法在项目中立即显示。

运行时切换/MD/MT以及调试版/MDd/MTd也定义了这些内容;特别是_DEBUGThe MSDN documentation (here)为这些提供了更多细节。

根据经验,在NDEBUG的情况下,测试#ifndef _DEBUG可能更好。我一般认为更一致。