处理所有异常
7.2 ID_uncaughtException
如果被抛出的异常没有被相应的 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
}
}
相关
依据
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