首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果同时指定了EHsc和EHa,会发生什么?

如果同时指定了EHsc和EHa,会发生什么?
EN

Stack Overflow用户
提问于 2011-10-12 11:14:18
回答 2查看 2.9K关注 0票数 4

我正在处理遗留代码。

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

代码语言:javascript
复制
<name of the file that needs EHa>\cl : warning D9025 : overriding '/EHs' with '/EHa'

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

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-10-12 11:57:51

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

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

票数 6
EN

Stack Overflow用户

发布于 2011-10-12 11:23:46

是的,警告告诉你发生了什么,因为发生的事情可能不是你想要的。这就是编译器警告背后的全部想法。

编译器不知道,也不关心哪些文件“实际需要EHa”(在编译文件之前,编译器不能告诉任何有关该文件的信息)。它应用了你让它应用的选项。你让它同时应用,它告诉你,它解释这就好像你想要应用EHA一样。

在调用编译器时指定每个相互矛盾的标志并不意味着“尝试所有可能的编译器选项组合,直到找到一个有效的组合”。

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

https://stackoverflow.com/questions/7739189

复制
相关文章

相似问题

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