在这个主题中,我们将讨论在 C 或 C++ 中使用 goto
的好例子。 它的灵感来自 一个答案,人们认为我是在开玩笑,所以把它投了票。
摘要(为使意图更加明确,对原文中的标签进行了修改):
infinite_loop:
// code goes here
goto infinite_loop;
为什么它优于其他替代方案:
规则:
让我们看看能否像成年人一样讨论这个问题。
编辑
这个问题似乎已经完成。 它产生了一些高质量的答案。 感谢大家、
特别是那些认真对待我的小循环例子的人。 大多数持怀疑态度的人
缺乏块范围。 正如 @quinmars 在评论中指出的,你可以在循环体周围加上大括号。
循环体。 我顺便指出,"for(;;) "和 "while(true) "也没有免费提供大括号。
大括号(省略大括号可能会导致令人烦恼的错误)。 总之,我不会再浪费你的脑力
我可以使用无害的惯用语 for(;;)
和 while(true)
(如果我想保住我的工作的话)。
考虑到其他的回复,我发现许多人认为 goto
总是要以另一种方式重写的。
必须以另一种方式重写。 当然,你可以通过引入一个循环来避免 "转到"、
一个额外的标志、一叠嵌套的 if
s 或其他方法来避免goto
,但为什么不考虑一下goto
是否可能是这项工作的最佳工具呢?
也许是最好的工具?换句话说,人们准备忍受多少丑陋,以避免将内置的语言功能用于其预期目的?我认为
即使增加一个标记,代价也太大了。 我喜欢用变量来表示问题域或解决方案域中的事物。
仅仅为了避免 "转到 "并不能解决问题。
我接受第一个答案,它给出了分支到清理块的 C 模式。在所有公布的答案中,这是最有力的 "转到 "理由,当然 如果以憎恨者为避免它而不得不做出的扭曲来衡量的话。
我并不反对一般的 gotos,但我能想到几个原因,为什么你不想在你提到的循环中使用它们: