我要使用哪些编译器标志来完全摆脱异常处理?我根本不使用它们,但编译器仍然生成只用于异常处理的.pdata和.xdata部分。
发布于 2017-12-22 19:54:51
在项目属性中,将启用C++异常设置为No:
并通过指定/EHsc
标志启用展开语义:
要在命令行上设置此选项,您将省略/EHa
、/EHsc
和/EHs
标志,如编译器命令-行语法手册中所述,这些标志来自[option]
部分。进一步相关的MSDN阅读:
发布于 2020-12-30 21:15:25
这是我的经验。还有练习。
若要使用C++禁用cl.exe异常,应执行以下所有操作:
这种组合使得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
)的情况下,现在不需要做任何其他事情。我不是百分之百确定,请检查例如这里。
https://stackoverflow.com/questions/47946588
复制相似问题