Nir*_*han 4 c++ compiler-warnings compiler-options visual-c++
我正在处理遗留代码.
为了修复一些bug,我必须给EHa一些文件.我在测试时测试了整个项目的EHsc和EHa.这解决了我的问题,但发出警告称编译器正在用EHa覆盖EH.(选项的顺序是:/ EHsc/EHa)仅当正在构建需要EHa的文件时才会出现此警告.它不会出现在只需要EH的源文件中.
<name of the file that needs EHa>\cl : warning D9025 : overriding '/EHs' with '/EHa'
Run Code Online (Sandbox Code Playgroud)
我的问题是,这个警告是否说明实际发生了什么?EHa仅适用于实际需要EHa的源文件吗?(其他文件是否需要使用EHsc构建EH?)
谢谢.
/ EHa是"更强大"的设置.它意味着/ EHsc,但确保即使在抛出和捕获非C++异常时也会调用C++析构函数.Windows中的SEH例外.Just plain/EHsc允许代码生成器优化代码并省略异常过滤器,因为它没有看到方括号代码抛出C++异常的方法.这种优化不适用于SEH异常,任何语句都可以抛出一个AccessViolation.
当您在程序中使用非标准__try和__except关键字来捕获SEH异常时,您只需要/ EHa.AccessViolation,DivisionByZero,浮点异常,与使用SEH进行自身异常的语言运行时互操作等.如果您使用它们,那么您必须确保所有代码都使用/ EHa编译.当捕获到SEH异常时,出错会导致内存泄漏.
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |