米斯拉14.5说,不能使用continue语句。有人能解释一下原因吗?
谢谢您。

最佳答案

这是因为ancient debate about goto,无条件分支和意大利面代码,已经持续了40年左右。gotocontinuebreak和多个return语句都或多或少地被认为是错误的。
世界编程界的共识大致是这样结束的:我们认识到,如果你知道自己在做什么的话,你可以不用编写意大利面代码就可以使用这种语言的这些特性。但我们仍然不鼓励他们,因为有很大的可能性,不知道他们在做什么的人将使用功能,如果他们是可用的,然后创建意大利面。我们也不鼓励它们,因为它们是多余的特性:很明显,你可以不用它们编写程序。
由于MISRA-C是针对关键系统的,所以MISRA-C:2004有办法尽可能多地禁止这些无条件的分支功能。因此,gotocontinue和多次返回被禁止。break仅当同一循环中有一个中断时才允许。
然而,在目前正在评估的“MISRA-C:2011”草案中,委员会考虑再次允许所有这些特征,但有一项限制,即Goto只应允许向下跳,而不应向上跳。该委员会的理由是,现在有足够聪明的工具(即静态分析器)可以识别出错误的程序流,因此可以允许使用关键字。
goto的争论仍然激烈…

关于c - 为什么“继续”在MISRA C:2004中被视为违反C?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10975722/

10-12 16:14