函数的退出点数量应在规定范围之内
8.38 ID_tooManyExit
理想情况下应在函数的结尾设置统一的退出点,使代码具有清晰的静态结构,否则可读性较差,尤其在多个嵌套的作用域中使用 return 等语句,会使代码难以理解。
示例:
void foo()
{
if (a) {
if (b) {
return; // Bad
}
....
} else {
....
return; // Bad
}
}
例中函数的主体逻辑被 return 语句“割裂”,这显然是不利于阅读和维护的。
然而,严格地要求每个函数只能有一个退出点是不够灵活的,对于 if...else-if、switch-case、catch-handlers 等并列的分枝结构,其末尾的退出点可以算作一个退出点,如:
try {
....
} catch (A&) {
....
return 0; // Let it go
} catch (B&) {
....
return 1; // Let it go
}
配置
maxExitCount: 退出点数量上限,超过则报出
相关
参考
MISRA C 2004 14.7
MISRA C 2012 15.5
MISRA C++ 2008 6-6-5