46.在标准的允许下,在任何赋值序列的情况下表达式的值应该一样(R)
该规则的目的是避免由表达式引起的对变量的边缘影响。
例如:
int myfunc()
{
int i = 1;
int a = 2;
a = (i++) + (i--); /* 与规则冲突 */
}
47.在C语句的处理过程中,通过添加非依赖性的标识来而不是采用C的默认处理顺序(A)
另外,还要避免C语句过长,从而增加阅读的难度系数。
例如
x = (a*5) + (b/6);
48.混合精度的数学表达式应该采用显示的数据转换产生期望的结果。(A)
49.对于不使用0的值应该明显检查,除非操作是针对布尔型(A)
例如:
float a = 0.0;
float b = 1.0;
float c = 0.0;
c = b/a; /* 与规则49冲突*/
50.浮点变量不应该采用准确的等于或不等于进行比较(R)
例如:
float a = 1.0, b = 2.0;
float c = 1.0;
if (a == c) { … } /* 与规则冲突 */
if (a != b ) {….} /* 与规则冲突 */
51.常数无符号整型表达式的赋值应该不会引起wrap-around(A)
#if (1u – 2u) /* 违反规则 */
…..
#endif
52.不存在无法被执行到的代码(R)
53.所有的非空句子应该具有边缘影响(R)
例如
int a = 9;
a = a; /* 违反规则 */
54.空语句只能单独一行出现,并且不允许在该语句中有任何文本内容(R)
55.除了Switch语句,不能出现任何Label(A)
56.不能使用goto语句(R)
57.不能使用continue语句(R)
58.除非是要介绍switch语句,break语句不允许使用(R)
59.由if,else if,else,while,do…while或for构成的句子应该用括号括起来(R)
例如
if (a == b){
a = 5; /* OK */
} else
b = 5; /* 违反规则 */
60.所有的if 和 else if结构最后都要包含最终的else句子(A)
61.switch句子中,所有的非空case语句最后都要有break语句(R)
62.所有的switch句子都应该包含一个最终的default句子(R)
63.switch中的表达式不能表示一个布尔值(A)
例如
switch (a == b) { /* 违反规则 63 */
case ….
}
64.每一个switch语句至少有一个case句子(R)
例如
switch(…) {
default: …; /* 违反规则 64 */
}
65.浮点变量不能用作循环的计算器(R)
例如
float i = 0.0;
for(i = 0.0; i < 100.0; i += 1.0) { /* 违反规则 65*/
}
66.在for语句中用于循环控制的只能是表达式(A)
例如
int j = 0;
for (j = 0; 1; j ++) { /* 违反规则 66*/
….
}
67.用于for循环迭代计算的数值变量不能在循环体内被修改变量(A)
int j = 0;
for (j = 0; j < 10; j ++) {
j = j+2; /* 违反规则 67*/
}