使用goto有什么问题?

可能重复:
为什么使用goto不好?
GOTO仍然认为有害?

我通过xkcd了解并看到了这个(如果在几年前还读了一些有关它们的消极文字):
你的连接速度太慢了,得到一个更快的看到这个图像
究竟是什么错呢? 为什么goto在C ++中甚至有可能呢?

为什么我应该使用它们?

因为他们导致意大利面代码 。

在过去的编程语言中没有while()if()等,程序员用goto来编写他们程序的逻辑。 这导致了难以维系的混乱。

这就是为什么CS神创造function条件和循环。 结构化编程当时是一场革命。

goto's在一些地方是合适的,比如跳出嵌套循环

如果正确使用,没有什么是错的。 这是“禁忌”的原因,因为在C初期,程序员(通常来自程序集背景)会使用goto来创build令人难以置信的难以理解的代码。

大多数时候,你可以生活在没有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从深度嵌套循环中跳出通常比使用条件variables更清晰并在每个级别上检查它。

使用goto来实现子程序是被滥用的主要方式。 这就产生了不必要的难以阅读和维护的所谓的“意大利面代码”。 goto也可以用来从一个函数跳到另一个函数而不用调用函数,但是这几乎总是危险而且灾难性的。

goto本身没有错。 这是一个非常有用的编程结构,并有许多有效的用途。 最好想到的是C程序中的结构化资源释放。

goto出问题的地方是他们被虐待的时候。 滥用gotos会导致完全不可读和不可维护的代码。

1968年, Edsger Dijkstra给ACM的编辑写了一封名为“GOTO”的着名信件, 认为这是有害的,他在这篇文章中为while循环if … then … else条件语句规定了结构化编程的情况。 当使用GOTO代替这些控制结构时,结果通常是意大利式面条代码 。 几乎每一天使用的编程语言都是一种结构化的编程语言,使用GOTO几乎已经被淘汰了。 事实上,Java,Scala,Ruby和Python根本没有goto命令。

C,C ++和Perl仍然有一个GOTO命令,并且有一些情况(特别是在C语言中) GOTO是有用的 ,例如一个break语句可以退出多个循环,或者作为一种集中清理代码的方式即使有多种方法来终止函数(例如通过在函数进程中返回多个错误代码),函数也是如此。 但一般来说,它的使用应限制在以受控和公认的方式要求的特定devise模式。

(在C ++中,最好使用RAII或ScopeGuard (更多)而不是使用GOTO进行清理,但GOTO是Linux内核 ( 另一个源代码 )中经常使用的习惯用法,这是习惯性C代码的一个很好的例子。

XKCD漫画是一个笑话,“如果GOTO总是被认为是有害的,当某些特定的devise模式,通过它的使用大大帮助?

你谷歌的问题?

反转运动的创始人是Edsger Dijskstra和他的传奇人物“Goto Considered Harmful”

为了让你开始,你可以转到(哈哈!) http://en.wikipedia.org/wiki/GOTO

在C ++中是可能的,因为它可能在C中。无论你是否应该使用它,都是长期的宗教战争。