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

Where are NDEBUG and _DEBUG Defined in Visual Studio 2015?

我可以转到默认 Visual Studio 2010 项目的设置,然后查看 "Configuration Properties">>"C/C++">> 中定义的 NDEBUG_DEBUG "Preprocessor" 的 "Preprocessor Definitions":

如果我去设置默认Visual Studio 2015项目"Preprocessor Definitions"是空的!

我什至没有在 Visual Studio 2015 .vcxproj 中看到 NDEBUG_DEBUG。我知道它的定义是正确的,因为 assert(false) 只在调试配置中触发。微软在 Visual Studio 2015 年将这些定义藏在哪里了?我可以修改它们吗,还是已经被我拿走了?

编辑: 是正确的。我不明白的是 assert 如果在发布配置中触发则发生不同。该程序不会弹出 assert 对话框,但也不会执行 system("pause"):

void main() {
    assert(false);
    system("pause");
}

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

Assertion failed: false, file temp.cpp, line 9

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

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

根据项目配置,它们可以从父属性文件继承,因此在项目中可能不会立即可见。

运行时开关 /MD/MT 和调试版本 /MDd/MTd 也定义了这些;特别是 _DEBUGThe MSDN documentation (here) 为这些提供了更多详细信息。

根据经验,在NDEBUG的情况下,测试#ifndef _DEBUG可能会更好。我通常觉得这样更一致。