使用 goto¶
ID: cpp/use-of-goto
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- maintainability
- readability
- language-features
Query suites:
- cpp-security-and-quality.qls
使用 goto
语句会增加代码的理解和维护难度。 因此,不建议使用 goto
语句,除非将其作为一种机制来跳出多个嵌套循环或跳转到函数末尾的错误处理代码。 此规则标识了 goto
语句的复杂(因此难以理解)用法。 包含多个向前跳转的 goto
语句和多个向后跳转的 goto
语句的函数体会被突出显示。
建议¶
在大多数情况下,可以通过以下方式重写和/或重新排列代码:
使用结构化控制流结构,例如
if
、while
和for
;使用
break
或continue
提前停止循环迭代;或者使用
return
提前退出函数。goto
语句可能是跳出深度嵌套循环或跳转到错误处理代码的最佳解决方案,而不会对函数的可读性产生负面影响。 此类用法不会被此规则标记。
参考资料¶
联合攻击战斗机飞行器 C++ 编码标准,AV 规则 189。洛克希德·马丁公司,2005 年。
E. W. Dijkstra 档案馆:反对 GO TO 语句的理由 (EWD-215)。
MSDN 库:goto 语句 (C++)。
Mats Henricson 和 Erik Nyquist,工业级 C++,规则 4.6。Prentice Hall PTR,1997 年。(PDF)。
cplusplus.com:控制结构。