使用 goto 有什么问题?

新手上路,请多包涵

可能的重复:

为什么使用 goto 不好?

GOTO 仍然被认为是有害的?

我正在通过 xkcd 随机浏览并看到了这个(如果几年前还阅读了一些关于它们的负面文本):

你的慢速连接很糟糕,找一个更快的来看看这张图片

它实际上有什么问题?那么为什么 goto 在 C++ 中甚至是可能的呢?

为什么我 应该使用它们?

原文由 user142019 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 976
2 个回答

因为它们导致了 意大利面条代码

过去,编程语言没有while循环、if语句等,程序员使用goto来组成程序逻辑。它会导致无法维护的混乱。

这就是 CS 之神创造方法、条件和循环的原因。 结构化 编程在当时是一场革命。

goto 适用于一些地方,例如跳出嵌套循环。

原文由 Byron Whitlock 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏