我正在处理遗留代码。为了修复一些错误,我必须为某些文件提供EHa。我测试了在构建时将EHsc和EHa都赋予整个项目。这解决了我的问题,但给出警告说编译器正在用EHa覆盖EH。(选项顺序为:/EHsc/EHa)只有在构建需要EHa的文件时才会出现此警告。它不会出现在只需要EH的源文件上。\cl:warningD9025:overriding'/EHs'with'/EHa'我的问题是,这个警告是否说明实际发生了什么?EHa是否仅应用于实际需要EHa的源文件?(其他不需要EHa的文件是用EHsc建的吗?)谢谢。 最佳答案 /EHa是“更强
如果我在非托管C++、VisualStudio2008或更高版本中创建新项目,我想使用哪种异常处理模型?我知道/EHa选项会导致代码效率降低,并且还会捕获SEH异常,对吧?所以我一直在避开该选项,通常使用/EHsc,因此我只在catch(...)处理程序中捕获实际抛出的C++异常,而不是捕获访问冲突和其他结构化执行.如果我的代码中存在访问冲突,我不希望它被catch(...){}掩盖。我与其他希望catch(...){}什么都不做的人一起编写代码,如果存在访问冲突,他们甚至希望它这样做,这对我来说似乎是一个非常糟糕的主意。如果由于编码不好而出现错误,您不想将手指放在耳朵里大声说“啦啦啦
如果我在非托管C++、VisualStudio2008或更高版本中创建新项目,我想使用哪种异常处理模型?我知道/EHa选项会导致代码效率降低,并且还会捕获SEH异常,对吧?所以我一直在避开该选项,通常使用/EHsc,因此我只在catch(...)处理程序中捕获实际抛出的C++异常,而不是捕获访问冲突和其他结构化执行.如果我的代码中存在访问冲突,我不希望它被catch(...){}掩盖。我与其他希望catch(...){}什么都不做的人一起编写代码,如果存在访问冲突,他们甚至希望它这样做,这对我来说似乎是一个非常糟糕的主意。如果由于编码不好而出现错误,您不想将手指放在耳朵里大声说“啦啦啦
您能否列出实际差异/含义的项目符号列表?我阅读了相关的MSDN文章,但我对异步异常的理解仍然有点模糊。我正在使用Boost.Test编写一个测试套件,我的编译器发出一个警告,提示应该启用EHa:警告C4535:调用_set_se_translator()需要/EHa项目本身仅使用普通异常(来自STL)并且不需要/EHa开关。我是否必须使用/EHa开关重新编译它才能使测试套件正常工作?我的感觉是我只需要/EHa作为测试服。 最佳答案 当您使用/EHsc时,编译器仅在检测到包装在try{}block中的代码可能引发C++异常时,才会发出