Skip to main content
 首页 » 编程设计

c++之为什么以及何时应该在 C/C++ 中使用 goto

2024年11月01日12mengfanrong

这个问题在这里已经有了答案:





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是正确的选择。