☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

不应在模块之间传播异常

7.27 ID_crossModuleException
目录 › next › previous

异常的传播机制依赖编译器的具体实现,在不同编译器产生的模块间传播异常会造成运行时错误。

除非模块均由同一编译器的同一版本生成,否则模块供外部使用的接口不应抛出异常。

示例:

// a.dll
void foo() {
    throw Exception();   // Non-compliant
}

// b.exe
int main() try {
    foo();
} catch (Exception&) {   // May not catch
    ....
}

设例中 a.dll 和 b.exe 由不同的编译器生成,异常的抛出机制和捕获机制可能并不匹配,进而导致冲突。

相关

ID_ABIConflict

参考

SEI CERT ERR59-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.