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

处理所有异常

7.2 ID_uncaughtException
目录 › next › previous

如果被抛出的异常没有被相应的 catch 子句处理会引发 std::terminate 函数的执行,使程序异常终止。

应避免 std::terminate 函数被执行。std::terminate 函数执行前相关调用栈中的对象是否会被析构由实现定义。std::terminate 函数会调用由 std::set_terminate 指定的回调函数,在默认情况下会执行 abort 函数终止进程,但打开的流是否会被关闭,缓冲区内的数据是否会写入文件,临时文件是否会被清理等问题仍由实现定义。

示例:

class A {};
class B {};
class C {};

int main()
{
    try {
        int i = userInput();
        if (i < 0) {
            throw A();   // Compliant
        }
        if (i == 0) {
            throw B();   // Compliant
        }
        if (i > 5) {
            throw C();   // Non-compliant, missing handler
        }
        ....
    }
    catch (A&) {
        return 1;
    }
    catch (B&) {
        throw;     // Non-compliant, missing handler
    }
}

相关

ID_throwOutOfMain ID_implementationDefinedFunction

依据

ISO/IEC 14882:2003 15.3(9)-implementation ISO/IEC 14882:2003 15.5.1(2)-implementation ISO/IEC 14882:2011 15.3(9)-implementation ISO/IEC 14882:2011 15.5.1(2)-implementation

参考

MISRA C++ 2008 15-3-2 MISRA C++ 2008 15-3-4 SEI CERT ERR51-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.