使用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中。无论你是否应该使用它,都是长期的宗教战争。