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

禁止 goto 语句向嵌套的或无包含关系的作用域跳转

9.7.1 ID_forbidGotoBlocks
目录 › next › previous

不同的作用域对应不同的条件约束,在不同的作用域间跳转是对约束的破坏,很容易导致逻辑混乱。

向嵌套的或无包含关系的作用域跳转是不应被允许的,如果是为了结束当前流程而在同层或向外层作用域跳转,则可被本规则允许。

示例:

int foo(int a) {
    if (a == 0) {
        goto L;    // Non-compliant, jumps into a block
    }
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < a; j++) {
L:
            if (cond) {
                goto M;   // Compliant, jumps out of loops
            }
        }
        ....
    }
M:
    return a;
}

例中 goto L 从 if 语句跳入循环语句是应当被禁止的,而 goto M 用于结束循环流程,可以保留。

相关

ID_forbidGotoBack ID_forbidGoto

参考

MISRA C 2012 15.3 MISRA C++ 2008 6-6-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.