首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual 2015中,NDEBUG和_DEBUG在哪里定义?

在Visual 2015中,NDEBUG和_DEBUG在哪里定义?
EN

Stack Overflow用户
提问于 2015-10-15 14:28:13
回答 1查看 9.3K关注 0票数 5

我可以访问默认Visual 2010项目的设置,并查看“配置属性”(Configuration Properties)、C/C++“>>”预处理器“的预处理定义”中定义的NDEBUG_DEBUG

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

我甚至没有在Visual 2015 NDEBUG中看到任何提到_DEBUG_DEBUG的地方。不过,我知道它的定义是正确的,因为assert(false)只在调试配置中触发。微软在Visual 2015中把这些定义藏在哪里了?我是否有可能修改它们,或者它是否已经从我身上夺走了?

编辑: 尼尔的回答是正确的。我不明白的是,如果在发行版配置中触发了assert,情况就会有所不同。这个程序不会弹出一个assert对话框,但它也不会执行system("pause")

代码语言:javascript
复制
void main() {
    assert(false);
    system("pause");
}

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-15 17:13:51

通常,它们被定义为附加的预处理器定义/选项的一部分,并最终使用/D选项开关在命令行上着陆。

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

运行时切换/MD/MT以及调试版本/MDd/MTd也定义它们;在particlar中定义_DEBUGMSDN文档(这里)为这些提供了更多细节。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33151207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档