Questions tagged «goto»

在命令式编程中,“ go to”语句是无条件的跳转指令,它将控制流更改为由“ go to”语句引用的程序点。

30
GOTO仍然被认为有害吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 5年前关闭。 改善这个问题 每个人都知道Dijkstra写给编辑的信:转到被认为是有害的声明(也在此处是 .html成绩单和此处 .pdf),并且自那时以来一直在大力推动以尽可能避免使用goto声明。尽管可以使用goto生成无法维护的庞大代码,但仍保留在现代编程语言中。甚至Scheme中的高级连续控制结构也可以描述为复杂的goto。 什么情况下需要使用goto?什么时候最好避免? 作为后续问题:C提供了一对函数setjmp和longjmp,它们不仅可以在当前堆栈帧中而且可以在任何调用帧中转到。这些应该像goto一样危险吗?更危险吗? 迪克斯特拉本人对此感到遗憾,对此他不负责。在EWD1308的末尾(也在此处 .pdf),他写道: 最后是一个短故事,供记录。1968年,ACM通讯发布了我的文本,标题为“ goto声明被认为是有害的 ”,在后来的几年中,我的文本经常被引用,但是遗憾的是,经常看到这些文本的作者对此一无所知。标题,通过成为模板,成为了我成名的基石:我们几乎可以在X上看到标题为“ X认为有害”的各种文章,其中包括标题为“ Dijkstra认为有害”的文章。但是发生了什么事?我已经提交了标题为“ 反对goto陈述的案例 ”的论文为了加快出版速度,编辑将其更改为“编辑的信”,并在此过程中为其赋予了自己的发明的新标题!编辑是Niklaus Wirth。 与Dijkstra相匹配的,经过深思熟虑的经典论文是Donald E. Knuth撰写的结构化编程与go to语句。阅读既有助于重新建立上下文,也有助于对主题的非教条式理解。在本文中,Dijkstra对于此案的观点得到了报道,并且更加有力: 唐纳德·E·努斯(Donald E. Knuth):我相信提出这种观点实际上并不与迪杰斯特拉的想法完全不同意,因为他最近写了以下文章:“请不要陷入相信我对[去发言。我有不舒服的感觉,其他人正在一个宗教出来,仿佛编程的概念问题可以通过一个单一的技巧来解决,通过编码规则的简单形式! “

22
Java中有goto语句吗?
我对此感到困惑。我们大多数人都被告知Java中没有任何goto语句。 但是我发现它是Java中的关键字之一。在哪里可以使用?如果不能使用它,为什么将它作为关键字包含在Java中?
259 java  syntax  keyword  goto 




16
如何在Javascript中使用goto?
我有一些绝对必须使用实现的代码goto。例如,我要编写这样的程序: start: alert("RINSE"); alert("LATHER"); repeat: goto start 有没有办法用Javascript做到这一点?
127 javascript  goto 

3
Go为什么有“ goto”语句
我惊讶地发现Go带有“ goto”语句。我一直被教导说,“ goto”语句已经成为过去,并且因为它阻塞了程序的实际流程,所以它变得邪恶,并且函数或方法始终是控制流程的更好方法。 我肯定错过了什么。Google为什么要包含它?
110 go  goto 

8
有人还在C#中使用[goto]吗?为什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 改善这个问题 我想知道是否有人在C#中仍使用“ goto”关键字语法,以及这样做的可能原因是什么? 我倾向于将任何导致读者无视代码的语句视为不良做法,但想知道是否存在使用这种语法的可靠方案? 转到关键字定义
104 c#  .net  coding-style  goto 

1
会使用goto泄漏变量吗?
goto在不调用析构函数和事物的情况下跨代码段跳转是真的吗? 例如 void f() { int x = 0; goto lol; } int main() { f(); lol: return 0; } 不会x泄漏吗?
94 c++  goto 

15
在C中有效使用goto进行错误管理?
这个问题实际上是一个有趣的讨论的结果前一段时间在programming.reddit.com上。基本上可以归结为以下代码: int foo(int bar) { int return_value = 0; if (!do_something( bar )) { goto error_1; } if (!init_stuff( bar )) { goto error_2; } if (!prepare_stuff( bar )) { goto error_3; } return_value = do_the_thing( bar ); error_3: cleanup_3(); error_2: cleanup_2(); error_1: cleanup_1(); return return_value; } 使用goto这里似乎是最好的方法,导致所有可能的代码最整洁,最有效,或者至少在我看来如此。在代码完成中引用史蒂夫·麦康奈尔: goto在例程中很有用,该例程分配资源,对这些资源执行操作,然后重新分配资源。使用goto,您可以在代码的一部分中进行清理。跳转减少了忘记检测到错误的每个位置重新分配资源的可能性。 这种方法的另一种支持来自Linux设备驱动程序本部分一书。 …


16
用C或C ++编写好的getos的示例[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在这个线程中,我们看一下goto在C或C ++中良好使用的示例。灵感来自人们以为我在开玩笑而投票赞成的答案。 摘要(标签从原始更改为意图更加清晰): infinite_loop: // code goes here goto infinite_loop; 为什么比其他更好: 具体。 goto是导致无条件分支的语言构造。替代方案取决于使用支持条件分支的结构,并带有退化的始终为真的条件。 标签记录了意图,没有额外的注释。 读者不必扫描介入的代码以获取早期的breaks(尽管无原则的黑客仍然有可能continue用Early进行模拟 goto)。 规则: 假装傻瓜没有赢。可以理解,以上内容不能在实际代码中使用,因为它违反了既定的习惯用法。 假设我们都听说过“ Goto认为有害”,并且知道goto可以用来编写意大利面条式代码。 如果您不同意一个示例,则仅凭技术优势对其进行批评(“因为人们不喜欢goto”不是技术原因)。 让我们看看是否可以像大人一样谈论这件事。 编辑 这个问题似乎已经解决了。它产生了一些高质量的答案。感谢所有人,尤其是那些认真对待我的小循环榜样的人。大多数怀疑论者担心缺乏障碍的范围。正如@quinmars在评论中指出的那样,您始终可以在循环主体周围放置括号。我顺便指出for(;;),并while(true)没有给你免费任括号(并忽略他们可能会导致错误伤脑筋)。无论如何,我不会在这个琐事上浪费您的脑力-我可以忍受无害和惯用的语言for(;;),while(true)(如果我想继续工作,也可以)。 考虑到其他答复,我看到许多人认为goto您总是必须用另一种方式重写。当然,您可以goto通过引入循环,额外的标志,嵌套的ifs或其他方法来避免使用a ,但是为什么不考虑goto也许这是最好的工具呢?换句话说,人们准备忍受多少丑陋,以避免将内置语言功能用于其预期目的?我的观点是,即使添加一个标志也付出了很高的代价。我喜欢用变量来表示问题或解决方案领域中的事物。goto仅仅避免'不会削减它。 我将接受第一个答案,该答案给出了用于分支到清除块的C模式。IMO,这是goto所有已发布答案中最有力的理由,当然,如果您以仇恨者必须避免的扭曲来衡量它,那么当然。
79 c++  c  goto 

7
goto标签后的变量声明
今天我发现了一件事。我不知道在goto标签后不能声明变量。 编译以下代码 #include <stdio.h> int main() { int x = 5; goto JUMP; printf("x is : %d\n",x); JUMP: int a = 0; <=== giving me all sorts of error.. printf("%d",a); } 给出类似的错误 temp.c: In function ‘main’: temp.c:7: error: expected expression before ‘int’ temp.c:8: error: ‘a’ undeclared (first use in this …

11
PHP中的GOTO是否有害?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 我最近发现PHP 5.3支持名为的新语言构造GOTO。每个人都知道它在做什么。但是,它不完全是传统的GOTO,只是一个跳转标签。我很想知道这GOTO是否有害并暗示错误代码?
72 php  goto 

4
如何在C#中一次摆脱多个循环?
如果我有嵌套循环,并且想一次脱离所有循环怎么办? while (true) { // ... while (shouldCont) { // ... while (shouldGo) { // ... if (timeToStop) { break; // Break out of everything? } } } } 在PHP中,break采用一个参数来表示要中断的循环数。可以在C#中完成类似的事情吗? 那可怕的东西怎么样goto? // In the innermost loop goto BREAK // ... BREAK: break; break; break;
71 c#  loops  goto  break 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.