Jon*_*Mee 5 c++ assert visual-studio-2010 visual-studio visual-studio-2015
我可以转到默认Visual Studio 2010项目的设置,并在"配置属性">>"C/C++">>"预处理器"的"预处理器定义"中查看NDEBUG或_DEBUG定义:

如果我进入默认Visual Studio 2015项目的设置"预处理器定义"为空!

我甚至没有在Visual Studio 2015 .vcxproj中看到NDEBUG或_DEBUG提到过.我知道它是正确定义的,因为assert(false)只在Debug配置中触发.微软在Visual Studio 2015中将这些定义放在哪里?我可以修改它们,还是从我那里取走它?
编辑:
尼尔的答案是正确的.我不明白的是,assert如果在Release配置中触发,则会发生不同的情况.此程序不会弹出assert对话框,但它不会执行以下system("pause")任一操作:
void main() {
assert(false);
system("pause");
}
Run Code Online (Sandbox Code Playgroud)
相反,当我在Release配置从Visual Studio我看到控制台窗口弹出,并立即关闭运行它,所以我认为在assert不火的原因,我没有看到一个assert对话框.但是,如果我从终端运行已编译的Release可执行文件,它会立即结束,但它会输出:
断言失败:false,文件temp.cpp,第9行
因此,断言是在发布配置射击,它只是不弹出一个assert对话框.这意味着NDEBUG事实上没有被定义.
通常,它们被定义为附加预处理器定义/选项的一部分,并最终通过选项开关出现在命令行上/D。
根据项目配置,它们可以从父属性文件继承,因此可能不会立即在项目中可见。
运行时切换/MD、/MT调试版本/MDd并/MTd定义它们;特别是_DEBUG. MSDN 文档(此处)提供了更多详细信息。
根据经验,在 的情况下NDEBUG,测试一下可能会更好#ifndef _DEBUG。我通常认为这更加一致。
| 归档时间: |
|
| 查看次数: |
5706 次 |
| 最近记录: |