我可以转到默认Visual Studio 2010项目的设置,并查看“配置属性”>>“C / C ++”>>“预处理器”中定义的NDEBUG
或_DEBUG
“的”预处理器定义“:
如果我转到默认Visual Studio 2015项目的设置“预处理器定义”为空!
我甚至在Visual Studio 2015 .vcxproj中都没有看到NDEBUG
或_DEBUG
。我知道它已被正确定义,因为assert(false)
仅在Debug配置中触发。微软在Visual Studio 2015中将这些定义放在哪里?我可以修改它们,还是从我那里取出它?
修改
Niall's answer是正确的。我不明白的是,如果在Release配置中触发assert
,则assert
会发生不同的情况。该程序不会弹出system("pause")
对话框,但它也不会执行void main() {
assert(false);
system("pause");
}
:
assert
相反,当我在Visual Studio的Release配置中运行它时,我看到控制台窗口弹出并立即关闭,所以我假设 assert
没有触发因为我没有查看assert
对话框。 然而如果我从终端运行已编译的Release可执行文件,它会立即结束,但是它会输出:
断言失败:false,文件temp.cpp,第9行
因此断言在发布配置中触发,它不会弹出NDEBUG
对话框。这意味着{{1}}实际上不是被定义。
答案 0 :(得分:3)
通常这些被定义为附加预处理器定义/选项的一部分,并最终通过/D
选项开关登陆命令行。
根据项目配置,它们可以从父属性文件继承,因此可能无法在项目中立即显示。
运行时切换/MD
,/MT
以及调试版/MDd
和/MTd
也定义了这些内容;特别是_DEBUG
。 The MSDN documentation (here)为这些提供了更多细节。
根据经验,在NDEBUG
的情况下,测试#ifndef _DEBUG
可能更好。我一般认为更一致。