如何关闭 Microsoft 编译器 (cl) 中的异常?
How to turn off exceptions in Microsoft compiler(cl)?
我使用什么编译器标志来完全摆脱异常处理?
我根本不使用它们,但编译器仍然会生成 .pdata 和 .xdata 部分,这些部分仅用于异常处理。
在您的项目属性中,将 Enable C++ Exceptions 设置为 No:
并通过指定 /EHsc
标志启用展开语义:
要在命令行上设置此选项,您可以省略 [option]
部分中的 /EHa
、/EHsc
和 /EHs
标志,如 [=17] 中所述=] 手册。
进一步相关的 MSDN 阅读:
这是我的经验。和练习。
要使用 cl.exe 禁用 C++ 异常,应执行以下所有操作:
- /EHsc 或任何其他 /EH combination,不应作为开关存在,
- /D_HAS_EXCEPTIONS=0 必须使用
- /GR- 禁用 RTTI
该组合使 try/throw/catch
成为不存在的关键字。即:您处于非标准 C++ 领域。
cl.exe
编译器总是生成支持异步结构化异常处理的代码(SEH)
这意味着 C 或 C++,SEH“永远存在”。我个人确实使用它。 MS STL 编译并且使用上述开关组合非常快。在(几乎所有我的)main()
中,我发现了潜在的 SE,然后我 create a minidump Visual Studio 可以打开并引导您到代码中引发异常的确切位置。
我们需要谈谈 /kernel
开关。它一次性关闭 C++ 异常,并指示链接器生成“内核模式”win 可执行文件、驱动程序等。 /GR-
还是要手动使用。我将它用于标准 desktop/console 应用程序,没有任何问题。当然总是使用 SEH。
注意:_CPPUNWIND
您不能设置。但是您确实在代码中使用它来检查 C++ 异常是打开还是关闭。
HTH
PS:我总是使用静态运行时库:开关 /MT
和 /MTd
。我认为现在不需要做任何其他事情以防使用 dll 运行时,开关:/MD
和 /MDd
。我不是 100% 确定,请检查例如here.
我使用什么编译器标志来完全摆脱异常处理? 我根本不使用它们,但编译器仍然会生成 .pdata 和 .xdata 部分,这些部分仅用于异常处理。
在您的项目属性中,将 Enable C++ Exceptions 设置为 No:
并通过指定 /EHsc
标志启用展开语义:
要在命令行上设置此选项,您可以省略 [option]
部分中的 /EHa
、/EHsc
和 /EHs
标志,如 [=17] 中所述=] 手册。
进一步相关的 MSDN 阅读:
这是我的经验。和练习。
要使用 cl.exe 禁用 C++ 异常,应执行以下所有操作:
- /EHsc 或任何其他 /EH combination,不应作为开关存在,
- /D_HAS_EXCEPTIONS=0 必须使用
- /GR- 禁用 RTTI
该组合使 try/throw/catch
成为不存在的关键字。即:您处于非标准 C++ 领域。
cl.exe
编译器总是生成支持异步结构化异常处理的代码(SEH)
这意味着 C 或 C++,SEH“永远存在”。我个人确实使用它。 MS STL 编译并且使用上述开关组合非常快。在(几乎所有我的)main()
中,我发现了潜在的 SE,然后我 create a minidump Visual Studio 可以打开并引导您到代码中引发异常的确切位置。
我们需要谈谈 /kernel
开关。它一次性关闭 C++ 异常,并指示链接器生成“内核模式”win 可执行文件、驱动程序等。 /GR-
还是要手动使用。我将它用于标准 desktop/console 应用程序,没有任何问题。当然总是使用 SEH。
注意:_CPPUNWIND
您不能设置。但是您确实在代码中使用它来检查 C++ 异常是打开还是关闭。
HTH
PS:我总是使用静态运行时库:开关 /MT
和 /MTd
。我认为现在不需要做任何其他事情以防使用 dll 运行时,开关:/MD
和 /MDd
。我不是 100% 确定,请检查例如here.