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

case 和 default 标签应直接从属于 switch 语句

9.5.5 ID_switch_badFormedCase
目录 › next › previous

不直接从属于 switch 语句的 case 或 default 标签用于非结构性跳转,是公认的不良实现。

关于非结构性跳转的进一步讨论可参见 ID_forbidGoto。

示例:

switch (v)
{
case 1:         // Compliant
    if (cond)
    {
case 2:         // Non-compliant
        ....
    }
    else
    {
default:        // Non-compliant
        ....
    }
}

例中 case 1 直接从属于 switch 语句,而 case 2 和 default 直接从属于 if 语句,当 v 的值不是 1 时,会绕过 if 语句的条件判断,产生非结构性跳转,与 goto 语句的问题一样,很容易导致逻辑混乱且不利于维护。

虽然有些编程技巧会将 case 置于循环中,如“Duff’s device”等,但当今主流的编程语言均已不再提倡非结构性跳转。

相关

ID_forbidGotoBlocks

参考

MISRA C 2004 15.1 MISRA C 2012 16.2 MISRA C++ 2008 6-4-4
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.