c++ - NDEBUG 和 _DEBUG 在 Visual Studio 2015 中定义在哪里?

标签 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) 只在调试配置中触发。 Microsoft 将这些定义隐藏在 Visual Studio 2015 的什么地方?我可以修改它们吗,还是已经被我拿走了?

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

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

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

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

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

最佳答案

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

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

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

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

关于c++ - NDEBUG 和 _DEBUG 在 Visual Studio 2015 中定义在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33151207/

相关文章:

c++ - MFC MessageMap 和虚函数

c++ - 为什么 std::ratio 不支持比较运算符?

c++ - Visual Studio C++ 编译器中的错误?

c# - 在visual studio中,如何自动输入对象的后半部分?

c# - 需要优化 C# 代码以将 CSV 行插入 MySql

c++ - 未处理的异常在 0x00C87963 在 .... : 0xC0000005: Access violation reading location 0xCCCCCCE0

c++ - 生成由单独的测试类调用的 C++ 静态库的测试覆盖率

c - 将文件加载到 RAM(静态)以缩短读取时间

visual-studio-2010 - 将字段集合传递到汇编方法中

vb.net - 我编写了一个反转字符串的代码(确实如此),但我认为这不是干净/正确的方法