gpt4 book ai didi

c++ - 如果同时指定 EHsc 和 EHa 会发生什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:37 25 4
gpt4 key购买 nike

我正在处理遗留代码。

为了修复一些错误,我必须为某些文件提供 EHa。我测试了在构建时将 EHsc 和 EHa 都赋予整个项目。这解决了我的问题,但给出警告说编译器正在用 EHa 覆盖 EH。(选项顺序为:/EHsc/EHa)只有在构建需要 EHa 的文件时才会出现此警告。它不会出现在只需要 EH 的源文件上。

<name of the file that needs EHa>\cl : warning D9025 : overriding '/EHs' with '/EHa'

我的问题是,这个警告是否说明实际发生了什么? EHa 是否仅应用于实际需要 EHa 的源文件? (其他不需要EHa的文件是用EHsc建的吗?)

谢谢。

最佳答案

/EHa 是“更强”的设置。它暗示/EHsc 但确保即使在抛出和捕获非 C++ 异常时也会调用 C++ 析构函数。 Windows 中的 SEH 异常。只是简单的/EHsc 允许代码生成器优化代码并在它看不到括号代码抛出 C++ 异常的方式时省略异常过滤器。这种优化不适用于 SEH 异常,例如任何语句都可能抛出 AccessViolation。

当您在程序中使用非标准的 __try 和 __except 关键字捕获 SEH 异常时,您只需要/EHa。 AccessViolation、DivisionByZero、浮点异常、与使用 SEH 处理自身异常的语言运行时互操作等。如果您使用它们,那么您必须确保所有 您的代码都是使用/EHa 编译的。当捕获到 SEH 异常时,弄错可能会导致内存泄漏。

关于c++ - 如果同时指定 EHsc 和 EHa 会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com