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
1、 罕铞泱殳 2462 The variable i荏鱿胫协nitialized in the first expression of this 'for' statement is not the variable identified as the 'loop control variable' (%s). 'for' 循环的第一个表达式初始化了不是一个'循环控制变量'的变量。 主要通过检查'for'循环语句的3个表达式来识别控制变量。 通常情况下,控制变量在第二个表达式中,是一个关系运算符的操作数。
2、官方示例
3、编程规范修改举例
Rule 14.3 2990
1、 罕铞泱殳 2990 The value of t茑霁酌绡his loop controlling expression is always 'true'. 当循环语句(while, do-while或for)的控制表达式不是常量表达式,但总是非零时,即当表达式值能用"1"表示时生成此消息。这种"退化"表达式是代码的一种逻辑缺陷,例如在循环中控制变量值没有被修改的情况。
2、官方示例
3、编程规范修改举例NO
Rule 14.4 3344
1、 罕铞泱殳 3344 Controlling expression is not a荏鱿胫协n 'essentially Boolean' expression. 'if'、 'for'、 'while'、 'do...while'结构中的控制表达式是条件操作符的第一个操作数。表达式的结果值隐式地和 '0' 进行比较。然而,只有当操作符的运算结果是显式的0或1时,表达式的可读性最高。
2、当控制表达式不是由以下的运算符构成的时候, 将会产生消息 3344:关系运算符: < > <= >=相等运算符: == !=逻辑运算符: ! && ||因此,例:与使用一个整型变量作为控制表达式(例如:"x")相比,更好的方式是使用表达式 "x != 0",这样逻辑比较就显得非常清晰了。
3、编程规范修改举例