Visual Studio 2015 中定义的 NDEBUG 和 _DEBUG 在哪里?
Where are NDEBUG and _DEBUG Defined in Visual Studio 2015?
我可以转到默认 Visual Studio 2010 项目的设置,然后查看 "Configuration Properties">>"C/C++">> 中定义的 NDEBUG
或 _DEBUG
"Preprocessor" 的 "Preprocessor Definitions":
如果我去设置默认Visual Studio 2015项目"Preprocessor Definitions"是空的!
我什至没有在 Visual Studio 2015 .vcxproj 中看到 NDEBUG
或 _DEBUG
。我知道它的定义是正确的,因为 assert(false)
只在调试配置中触发。微软在 Visual Studio 2015 年将这些定义藏在哪里了?我可以修改它们吗,还是已经被我拿走了?
编辑:
是正确的。我不明白的是 assert
如果在发布配置中触发则发生不同。该程序不会弹出 assert
对话框,但也不会执行 system("pause")
:
void main() {
assert(false);
system("pause");
}
相反,当我 运行 它在 Visual Studio 的发布配置中时,我看到控制台 window 弹出并立即关闭,所以我 假设 assert
没有触发,因为我没有看到 assert
对话框。 但是如果我运行从终端编译的Release可执行文件它立即结束,但是它输出:
Assertion failed: false, file temp.cpp, line 9
因此断言 是 在发布配置中触发,它只是不会弹出 assert
对话框。这意味着 NDEBUG
实际上 未被定义 。
通常这些被定义为附加预处理器的一部分 defines/options 并最终通过 /D
选项开关登陆命令行。
根据项目配置,它们可以从父属性文件继承,因此在项目中可能不会立即可见。
运行时开关 /MD
、/MT
和调试版本 /MDd
和 /MTd
也定义了这些;特别是 _DEBUG
。 The MSDN documentation (here) 为这些提供了更多详细信息。
根据经验,在NDEBUG
的情况下,测试#ifndef _DEBUG
可能会更好。我通常觉得这样更一致。
我可以转到默认 Visual Studio 2010 项目的设置,然后查看 "Configuration Properties">>"C/C++">> 中定义的 NDEBUG
或 _DEBUG
"Preprocessor" 的 "Preprocessor Definitions":
如果我去设置默认Visual Studio 2015项目"Preprocessor Definitions"是空的!
我什至没有在 Visual Studio 2015 .vcxproj 中看到 NDEBUG
或 _DEBUG
。我知道它的定义是正确的,因为 assert(false)
只在调试配置中触发。微软在 Visual Studio 2015 年将这些定义藏在哪里了?我可以修改它们吗,还是已经被我拿走了?
编辑:
assert
如果在发布配置中触发则发生不同。该程序不会弹出 assert
对话框,但也不会执行 system("pause")
:
void main() {
assert(false);
system("pause");
}
相反,当我 运行 它在 Visual Studio 的发布配置中时,我看到控制台 window 弹出并立即关闭,所以我 假设 assert
没有触发,因为我没有看到 assert
对话框。 但是如果我运行从终端编译的Release可执行文件它立即结束,但是它输出:
Assertion failed: false, file temp.cpp, line 9
因此断言 是 在发布配置中触发,它只是不会弹出 assert
对话框。这意味着 NDEBUG
实际上 未被定义 。
通常这些被定义为附加预处理器的一部分 defines/options 并最终通过 /D
选项开关登陆命令行。
根据项目配置,它们可以从父属性文件继承,因此在项目中可能不会立即可见。
运行时开关 /MD
、/MT
和调试版本 /MDd
和 /MTd
也定义了这些;特别是 _DEBUG
。 The MSDN documentation (here) 为这些提供了更多详细信息。
根据经验,在NDEBUG
的情况下,测试#ifndef _DEBUG
可能会更好。我通常觉得这样更一致。