首页 | 培训 | 求学 | 参考 | 教师 | 教材 | 学校 | 招聘 | 租房 | 旅游ASKEDU.com  


培训指南—ASKEDU.com

返回 | 主页


MISRA2004概览 下



[摘要]
<表达式>
Rule12.2(强制):表达式的值应和标准允许的评估顺序一致

例:
X=b[i] + i++;
不同的编译器给出的结果不一样,b[i]是否先执行?
应:x=b[i];
i++;
比如:
X=func(i++,i);
Rule12.3(强制):sizeof操作符不能用在包含边界作用(side eff...

<表达式>
Rule12.2(强制):表达式的值应和标准允许的评估顺序一致

例:
X=b[i] + i++;
不同的编译器给出的结果不一样,b[i]是否先执行?
应:x=b[i];
i++;
比如:
X=func(i++,i);
Rule12.3(强制):sizeof操作符不能用在包含边界作用(side effect)的表达式上

例:
Int32_t=i;
Int32_t=j;
j=sizeof(i=1234);
表达式并没有执行,只是得到表达式类型int的size

Rule 12.4(强制):逻辑操作符&&或者||右边不能包含边界作用(side effect)

例:
If(ishight) && (x== i++)),如果ishight=0那么i++不会评估

Rule 12.3(建议):++和- -不能和其他表达式用在一个表达式中
例:
U8a=++u8b + u8c--;

<控制语句表达式>
Rule13.1(强制):赋值语句不能用在一个产生布尔值的表达式中
例:
If((x=y)!=0)…
更差:
If (x=y)…

Rule13.3(强制):浮点表达式不应该测试其是否相等或者不相等
Rule13.4(强制):for控制表达式中不要包含任何浮点类型
Rule13.6(强制):数字变量作为for循环的循环计数不要在循环体内部被修改
例:
Flag=1;
For(i=0;(i<5)&&(flag==1);i++)
{
Flag=0;
i=i+3;
}

<控制流>
Rule 14.1(强制):不要有执行不到的代码
例:
Swich(event)
{
Case www;
do_wakeup();
break;
do_more();

}

Rule 14.4(强制):goto语句不能使用
Rule 14.5(强制):continue不能使用
Rule 14.6(强制):函数应在函数结束有一个出口
Rule 14.7(强制):witch,while,do ...while,for语句体应是一个混合语句(括号)
Rule 14.10(强制):所有if…else if结构都应该由else结束

<Switch语句>
Rule 15.3(强制):switch的最后应是default
Rule 15.4(强制):switch表达式不能使用布尔表达式
例:
Switch(x==0)
{
… …
}
Rule 15.5(强制):每一个Switch语句都应该有一个case
例:
Switch(x)
{
Uint8_t var; /* 违反*/
Case 0:
A=b;

}

<函数>
Rule16.2(强制):函数不能直接或者间接的调用自己
注:safe-related 系统不能用递归,超出堆栈空间很危险

Rule16.8(强制):non-void类型函数的所有出口路径都应该有一个明确的return语句表达式

<指针和数组>
Rule17.1(强制):指针的数学运算只能用在指向数组的地址上
Rule17.3(强制):>,>=,<,<=不能用在指针类型除非指向同一个数组
Rule 17.5(建议):不要用2级以上指针

<结构和联合>
Rule18.4(强制)不要用Union

<预处理指令>
Rule19.1(建议):#include语句的前面只能有其他预处理指令和注释
Rule19.2(建议):#include指令中的头文件名称不能包含非标准的字符
Rule19.5(强制):宏不能在函数体内定义
Rule19.8(强制):类函数宏调用时不能没有它的参数

<标准库>
Rule20.1(强制):标准库中的保留标识符,宏和函数不能定义,重定义,和undefined
Rule20.4(强制):动态内存分配不能使用
注:不能使用:malloc,calloc,free,realloc
Rule20.9(强制):输入输出库(stdio.h)不能用在产生嵌入式系统中
Rule20.12(强制):时间处理函数<time.h>不能使用

<运行时故障>
Rule 21.1(强制):通过使用一下手段确保把运行时故障最小化:
– 静态分析工具/技术
– 动态分析工具/技术
– 编写明确的代码避免运行时错误

QAC Compliance Module for MISRA-C:2004 已经正式发布,成为最快全面支持MISRA2004的工具之一。


其它培训参考信息:
MISRA2004概览 上
McCabe推荐的代码走查方法 下
McCabe推荐的代码走查方法 上
软件测试培训考试题目
嵌入式测试中数据获取的几种方式
软件许可证的安装与配置
为什么要进行烦人的单元测试? 下
为什么要进行烦人的单元测试? 上



信息来自互联网,敬请核实,谨慎使用



 





Jobs in Other Countries

  中国 | Worldwide: United States United Kingdom Australia Canada India | Travel AgencyASKEDU.com