gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:39 29 4
gpt4 key购买 nike

我可以转到默认 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com