可能的重复:
我正在通过 xkcd 随机浏览并看到了这个(如果几年前还阅读了一些关于它们的负面文本):
它实际上有什么问题?那么为什么 goto 在 C++ 中甚至是可能的呢?
为什么我 不 应该使用它们?
原文由 user142019 发布,翻译遵循 CC BY-SA 4.0 许可协议
可能的重复:
我正在通过 xkcd 随机浏览并看到了这个(如果几年前还阅读了一些关于它们的负面文本):
它实际上有什么问题?那么为什么 goto 在 C++ 中甚至是可能的呢?
为什么我 不 应该使用它们?
原文由 user142019 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果使用得当, goto
没有任何问题。它之所以成为“禁忌”是因为在 C 语言的早期,程序员(通常来自汇编背景)会使用 goto
来创建难以置信的难以理解的代码。
大多数时候,没有 goto
你也可以过得很好。然而,在少数情况下, goto
可能很有用。主要的例子是这样的情况:
for (i = 0; i < 1000; i++) {
for (j = 0; j < 1000; j++) {
for (k = 0; k < 1000; k++) {
...
if (condition)
goto break_out;
....
}
}
}
break_out:
使用 goto
跳出深度嵌套的循环通常比使用条件变量并在每个级别上检查它更干净。
使用 goto
实现子程序是其被滥用的主要方式。这会产生所谓的“意大利面条式代码”,它不必要地难以阅读和维护。
原文由 bta 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
因为它们导致了 意大利面条代码。
过去,编程语言没有while循环、if语句等,程序员使用goto来组成程序逻辑。它会导致无法维护的混乱。
这就是 CS 之神创造方法、条件和循环的原因。 结构化 编程在当时是一场革命。
goto 适用于一些地方,例如跳出嵌套循环。