我知道很多问题,例如为什么不使用goto,为什么goto不好用,为什么是goto由恶魔创造的,为什么goto要敲打打字者的手指等?
在对这个问题,这个问题甚至在Wikipedia的许多答案中,都有可能找到赞成或反对的理由goto。
甚至Stackoverflow也有一个goto标签:)
但是,显然,它goto被接受为有效命令,否则您的编译器/解释器将不知道如何处理它。即使在C / C ++中,也可以使用goto,并且该语言甚至具有正式的ISO规范。
因此,大概在某些情况下,只有通过使用goto它才能完成某些任务。那么,为什么以及何时goto在C / C ++中使用a ?
编辑:
只想确认一下:
1-这个问题不需要辩论。应该是负责任的:给出一个或多个goto唯一解决方案的情况,或说明no, it's always possible to avoid a goto。当然,我不是唯一可以决定是否关闭它的人,但是我不认为“范围太广,要求辩论等”是关闭它的理由。
2-在某些情况下,goto可以使代码更整洁,更快等。我不希望如此。我想知道是否存在goto唯一的解决方案(不,这不是“给出goto的好例子”问题的重复)
3-如果有正当理由,我将接受任何不赞成票,脸上带着微笑。但是我很确定这个问题已经解决了,并且已经对该主题进行了先前的研究。拒绝投票很简单,因为使用了以“ G”开头的4字母禁忌词...对不起...
最新的 MISRA 标准现在允许 goto。
goto 有意义的一个很好的例子是当你有一个包含很多退出点的大型例程时。您可以有许多 return 语句(不好)使用“结构化编程”条件(也不好)或“goto Done;它在返回之前将程序发送到一组结束语句”对代码进行卷积。
MISRA 标准基本上允许在这些情况下使用 goto。我认为“仅向下”是他们的标准之一。
我使用 goto 的唯一原因是当它用于需要一些常见清理的函数的错误返回条件时。goto 的目标位于函数末尾附近,并且“正常”返回在标签之前返回。
在任何情况下都没有goto绝对必要的a:如果您确实愿意,可以始终避免使用a,但是仅出于思想上的原因这样做是错误的。
例如,我的一个朋友编写了一个具有15个嵌套循环的小波变换函数。如果这些循环中发生错误,他将goto在函数的return语句之前进入清除块。为了在没有 goto的情况下达到相同的效果,需要设置一个标志并在每个循环级别对其进行测试,这会使他的代码可读性差得多。在这种情况下,goto是正确的选择。
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |