MISRA C Rule 14.2 2462 14.3 2990 14.4 3344
for循环语句的第一个表达式中初始化了一个不是循环控制变量的变量 ;
循环控制表达式的值总是'true' ;
控制表达式不是一个'基本布尔类型'表达式 。
工具/原料
Rule 14.2 2462 14.3 2990 14.4 3344
MISRA C:2012
Rule 14.2 2462
2462 The variable initialized in the first expression of this 'for' statement is not the variable identified as the 'loop control variable'
(%s).
'for' 循环的第一个表达式初始化了不是一个'循环控制变量'的变量。 主要通过检查'for'循环语句的3个表达式来识别控制变量。 通常情况下,控制变量在第二个表达式中,是一个关系运算符 的操作数。
官方示例

编程规范修改举例

Rule 14.3 2990
2990 The value of this loop controlling expression is always 'true'.
当循环语句(while, do-while或for)的控制表达式不是常量表达式,但总是非零时,即当表达式值能用"1"表示时生成此消息。这种"退化"表达式是代码的一种逻辑缺陷,例如在循环中控制变量值没有被修改的情况。
官方示例

编程规范修改举例
NO

Rule 14.4 3344
3344 Controlling expression is not an 'essentially Boolean' expression.
'if'、 'for'、 'while'、 'do...while'结构中的控制表达式是条件操作符 的第一个操作数。表达式的结果值隐式地和 '0' 进行比较。然而,只有当操作符的运算结果是显式的0或1时,表达式的可读性最高。
当控制表达式不是由以下的运算符构成的时候, 将会产生消息 3344:
关系运算符: < > <= >=
相等运算符: == !=
逻辑运算符: ! && ||
因此,例:与使用一个整型变量作为控制表达式(例如:"x")相比,更好的方式是使用表达式 "x != 0",这样逻辑比较就显得非常清晰了。

编程规范修改举例
