首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Microsoft编译器(Cl)中关闭异常?

如何在Microsoft编译器(Cl)中关闭异常?
EN

Stack Overflow用户
提问于 2017-12-22 19:42:00
回答 2查看 6K关注 0票数 3

我要使用哪些编译器标志来完全摆脱异常处理?我根本不使用它们,但编译器仍然生成只用于异常处理的.pdata和.xdata部分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-22 19:54:51

在项目属性中,将启用C++异常设置为No

并通过指定/EHsc标志启用展开语义:

要在命令行上设置此选项,您将省略/EHa/EHsc/EHs标志,如编译器命令-行语法手册中所述,这些标志来自[option]部分。进一步相关的MSDN阅读:

票数 7
EN

Stack Overflow用户

发布于 2020-12-30 21:15:25

这是我的经验。还有练习。

若要使用C++禁用cl.exe异常,应执行以下所有操作:

  • /EHsc或任何其他/EH组合,不应该以交换机的形式存在,
  • 必须使用/D_HAS_EXCEPTIONS=0
  • /GR-禁用RTTI

这种组合使得try/throw/catch成为不存在的关键字。也就是说:你是在非标准的C++领域.

cl.exe编译器总是生成支持异步结构化异常处理(赛赫)的代码。

这意味着C或C++,SEH是“永远在那里”。我个人确实用过它。MS编译,并与上述开关组合相当快。在(几乎我的所有) main()中,我捕捉到可能引发的SE,然后我捕获Visual可以打开的创建一个微型的,并将您带到引发异常的代码中的确切位置。

我们需要谈谈/kernel交换机。它可以一次关闭C++异常,并指示链接器生成“内核模式”win可执行文件、驱动程序等等。/GR-仍然必须手动使用。我把它用于标准的桌面/控制台应用程序,没有问题。当然,总是使用SEH。

注意:_CPPUNWIND你不能设置。但是您确实在代码中使用它来检查C++异常是打开还是关闭。

HTH

PS:我总是使用静态运行库:开关、/MT/MTd。我认为,在使用dll运行时(开关:/MD/MDd )的情况下,现在不需要做任何其他事情。我不是百分之百确定,请检查例如这里

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

https://stackoverflow.com/questions/47946588

复制
相关文章

相似问题

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