cppcoreguidelines-avoid-goto¶
使用 goto
进行控制流容易出错,应使用循环结构进行替换。仅允许嵌套循环中的向前跳转。
此检查实现了 C++ 核心准则中的 ES.76 以及高完整性 C++ 编码标准中的 6.3.1。
有关避免使用 goto
进行编程的原因的更多信息,您可以阅读著名论文 反对 GO TO 语句的论据。
此检查诊断所有语言模式下向后跳转的 goto
。这些应该用 C/C++ 循环结构替换。
// Bad, handwritten for loop.
int i = 0;
// Jump label for the loop
loop_start:
do_some_operation();
if (i < 100) {
++i;
goto loop_start;
}
// Better
for(int i = 0; i < 100; ++i)
do_some_operation();
现代 C++ 仅需要 goto
来跳出嵌套循环。
for(int i = 0; i < 100; ++i) {
for(int j = 0; j < 100; ++j) {
if (i * j > 500)
goto early_exit;
}
}
early_exit:
some_operation();
所有其他 goto
的用法都将在 C++ 中进行诊断。