“安全第一”—— C 语言编程规范
作者:清华大学 陈萌萌 邵贝贝
文章来源:单片机与嵌入式系统应用 2006-4-6 17:44:18
编者按: C 语言是开发嵌入式应用的主要工具,然而 C 语言并非是专门为嵌入式
系统设计,相当多的嵌入式系统较一般计算机系统对软件安全性有更苛刻的要求。
1998 年,MISRA 指出,一些在 C 看来可以接受,却存在安全隐患的地方有 127
处之多。2004 年,MISRA 对 C 的限制增加到 141 条。
嵌入式系统应用工程师借用计算机专家创建的 C 语言,使嵌入式系统应用得
以飞速发展,而 MISRAC 是嵌入式系统应用工程师对 C 语言嵌入式应用做出的贡
献。如今 MISRA C 已经被越来越多的企业接受,成为用于嵌入式系统的 C 语言标
准,特别是对安全性要求极高的嵌入式系统,软件应符合 MISRA 标准。
从本期开始,本刊将分 6 期,与读者共同学习 MISRAC。
第一讲:“‘安全第一’的 C 语言编程规范”,简述 MISRAC 的概况。
第二讲:“跨越数据类型的重重陷阱”,介绍规范的数据定义和操作方式,重点
在隐式数据类型转换中的问题。
第三讲:“指针、结构体、联合体的安全规范”,解析如何安全而高效地应用指
针、结构体和联合体。
第四讲:“防范表达式的失控”,剖析 MISRAC 中关于表达式、函数声明和定
义等的不良使用习惯,最大限度地减小各类潜在错误。
第五讲:“准确的程序流控制”,表述 C 语言中控制表达式和程序流控制的规范
做法。
第六讲:“构建安全的编译环境”,讲解与编译器相关的规范编写方式,避免来
自编译器的隐患。
C/C++语言无疑是当今嵌入式开发中最为常见的语言。早期的嵌入式程序大
都是用汇编语言开发的,但人们很快就意识到汇编语言所带来的问题——难移植、
难复用、难维护和可读性极差。很多程序会因为当初开发人员的离开而必须重新
编写,许多程序员甚至连他们自己几个月前写成的代码都看不懂。C/C++语言恰
恰可以解决这些问题。作为一种相对“低级”的高级语言,C/C++语言能够让嵌入
式程序员更自由地控制底层硬件,同时享受高级语言带来的便利。对于 C 语言和
C++语言,很多的程序员会选择 C 语言,而避开庞大复杂的 C++语言。这是很
容易理解的——C 语言写成的代码量比 C++语言的更小些,执行效率也更高。
对于程序员来说,能工作的代码并不等于“好”的代码。“好”代码的指标很多,
包括易读、易维护、易移植和可靠等。其中,可靠性对嵌入式系统非常重要,尤
其是在那些对安全性要求很高的系统中,如飞行器、汽车和工业控制中。这些系
统的特点是:只要工作稍有偏差,就有可能造成重大损失或者人员伤亡。一个不
容易出错的系统,除了要有很好的硬件设计(如电磁兼容性),还要有很健壮或
者说“安全”的程序。
然而,很少有程序员知道什么样的程序是安全的程序。很多程序只是表面上