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

switch 语句的每个非空分枝都应该用无条件的 break 或 return 语句终止

9.5.13 ID_switch_breakOmitted
目录 › next › previous

在 switch 语句的分枝中,break 或 return 语句的缺失是导致错误的常见原因。

示例:

switch (a)
{
case 0:
    b = 1;
    break;  // Compliant
case 1:
    b = 2;  // Non-compliant, missing ‘break’
default:
    b = 3;
    break;  // Compliant
}

相连的 case 标签不受本规则约束,但最好配有注释:

switch (c)
{
case 0:     // Compliant
case 1:
    ....
    break;
}

少数情况下,如果确实不能有 break 或 return 语句,应添加注释说明情况,或在 C++ 代码中用 [[fallthrough]] 注明:

switch (v)
{
case 1:
    do_something();
    [[fallthrough]];   // Compliant, since C++17
default:
    do_something_default();
    break;
}

依据

ISO/IEC 9899:1999 6.8.4.2(7) ISO/IEC 9899:2011 6.8.4.2(7) ISO/IEC 14882:2003 6.4.2(6) ISO/IEC 14882:2011 6.4.2(6) ISO/IEC 14882:2017 10.6.5(1 2 3)

参考

CWE-484 C++ Core Guidelines ES.78 MISRA C 2004 15.2 MISRA C 2012 16.3 MISRA C++ 2008 6-4-5
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.