热门问题
时间线
聊天
视角
MISRA C
来自维基百科,自由的百科全书
Remove ads
MISRA C是由汽车产业软件可靠性协会(MISRA)提出的C语言开发标准。其目的是在增进嵌入式系统的安全性及可移植性。针对C++语言也有对应的标准MISRA C++。
MISRA C一开始主要是针对汽车产业[1] ,不过其他产业也逐渐开始使用MISRA C:包括航空、电信、国防、医疗设备、铁路等领域中都已有厂商使用MISRA C。[2][3]
MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》在1998年发行,一般称为MISRA-C:1998.[4]。MISRA-C:1998有127项规则,规则从1号编号到127号,其中有93项是强制要求,其余的34项是推荐使用的规则。
在2004年时发行了第二版的MISRA C的第一版《Guidelines for the use of the C language in critical systems》(或称作MISRA-C:2004),其中有许多重要建议事项的变更,其规则也重新编号。MISRA-C:2004有141项规则,其中121项是强制要求,其余的20项是推荐使用的规则。规则分为21类,从“开发环境”到“运行期错误”[5]。
Remove ads
规则举例
MISRA C的一些规则是针对运算符的限制,例如MISRA-C:2004的规则12.10为“不要使用逗号运算符”,也可以用其他方式达到一样的效果。
动态分配记忆体功能是C语言的一大特色,可以在运行期依实际需求用malloc分配记忆体,在不使用此记忆体时再用free归还,但许多问题也和未正确处理动态分配记忆体功能有关,例如MISRA-C:2004的规则20.4为“不能使用动态堆的内存分配”,限制malloc、free等程序的使用。
C语言 程式码 if (x = y) 是完全合法且有效的 C语言 语句,但很可能是由于意外使用赋值运算子(=)而不是相等运算子(==)而导致的键入错误。
规则 8.18.2 表示 不应使用赋值运算子的结果,以确保报告此类程式码并审查其正确性。
工具
有许多工具声称可以检查代码和MISRA规则相容性,不过MISRA没有相关认证的程序[6]。相关工具可以帮助使用者评估和比较检查的结果,也会提供一些可符合MISRA-C规定的指南。
大部分的规定可以用支援静态代码分析的工具检查,有些规定需要用支援动态代码分析的工具检查。
- 以下是一些可以配合MISRA C规则进行检查的工具:
- Checkmarx (页面存档备份,存于互联网档案馆)
- Polyspace[7]
- GrammaTech
- Klocwork[8]
- Coverity[9]
- LDRA[10]
- Parasoft[11]
- PC-Lint[12]
- QA-C[13]
- Understand (软件)
- 以下是一些可以配合MISRA C规则进行检查的编译器:
Remove ads
相关条目
参考资料
外部链接
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads