这个问题在这里已经有了答案:
Examples of good gotos in C or C++ [closed]
(16 个回答)
8 年前关闭。
我知道很多关于为什么不使用的问题 goto
,为什么goto
是不好的做法,为什么goto
是魔鬼创造的,为什么打字的人的手指goto
应该被扯掉,等等...
而在 many answers to this questions , this question ,甚至在 wikipedia有可能找到赞成/反对的理由 goto
.
甚至 Stackoverflow 也有 goto
标签 :)
但是,很明显,goto
被接受为有效命令,否则您的编译器/解释器将不知道如何处理它。即使在 C/C++ 中,也可以使用 goto
,而且该语言甚至有正式的 ISO 规范。
因此,可能在某些情况下,只能使用 goto
有可能完成一些任务。那么,为什么以及何时应该 goto
在 C/C++ 中使用?
编辑:
只想确认一下:
1 - 这个问题不需要辩论。它应该是可回答的:给出一个或多个案例,其中 goto
是唯一的解决方案,或说明 no, it's always possible to avoid a goto
.当然,我不是唯一可以决定是否应该关闭它的人,但我不认为“太宽泛,需要辩论等”是关闭它的理由。
2 - 可能在某些情况下 goto
使代码更干净、更快等。我不想要那些。我想知道是否存在一种情况 goto
是唯一的解决方案(不,这不是“给出 goto 的好例子”问题的重复)
3 - 如果反对票是合理的,我会接受任何反对票,脸上带着微笑。但我很确定这个问题有答案,并且之前已经做过关于这个主题的研究。拒绝投票很简单,因为使用了以“G”开头的 4 个字母的禁忌词……对不起……
请您参考如下方法:
没有任何情况下 goto
是绝对必要的:如果你真的想避免它,你总是可以避免它,但纯粹出于理念原因而这样做是错误的。
例如,我的一个 friend 写了一个小波变换函数,它有(类似)15 个嵌套循环。如果这些循环出现错误,他会收到 goto
到函数的 return
之前的清理块陈述。要在没有 goto 的情况下实现相同的效果,需要设置一个标志并在每个循环级别对其进行测试,这会使他的代码的可读性大大降低。在这些情况下,goto
是正确的选择。