C语言度量及评测技术研讨.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言度量及评测技术研究 北京系统工程研究所软件室战茅佟金荣李冬红 摘要:本文主要介绍了提高C语言安全的一系列规则,并将这些规则分类说明. 关键字:1SOC标准安全MISRA 一、背景 软件发展到今天,规模越来越大,复杂程度也越来越高,随之而来的是软件的质量越 来越难以保证,软件的维护和质量评估越来越田难。C语言是当前使用最为广泛和最重要 的程序设计语言之一,它内在的语言灵活性、扩展的支持和在大量不同硬件上的潜在的可 移植性都使它赢得了用户的支持。但正是这些特点也带来了C语言的不安全性,使程序代 码的最后执行出现可能的错误。 影响c程序正确执行的不安全因素有以下几点: ●程序员的错误。程序员可能只是敲错了一个变量的名字,或者更复杂一点的情况例 如错误理解了算法,就会导致程序执行的错误。C语言的风格和表现方式使它既可以写出 结构合理的代码,也可以写出不恰当的、难于理解的代码;其次C语言的语法使它很容易 出现输入错误同时又是有效的代码.例如用赋值“=”代替了逻辑比较符“==”.结果是有 效的,但是错误的:第三,C语言的指导思想是程序员应该知道他们在做什么,如果出现 错误,那么这些错误是被C语言忽略的。例如程序员将一个浮点数值赋给一个代表真/假值 的整数变量,c语言是不会反对的,这样的不匹配被定义为是相容的。 ●程序员错误理解了C语言。C语言的一些领域是容易被程序员误解的,例如关于操 作符优先权的一组规则.这些规则定义的很好,但是比较复杂.在特别的表达式中容易引 发优先权的错误。 ●编译器的行为不符合程序员的想法。如果一个语言的某些特征是不完全定义的,或 者说是歧义的,那么就可能出现程序员的意思与编译器的解释不一致的情况。C语言的很 多领域就存在着这种情况,所以不同编译器的行为可能不同,同一个编译器的行为也可能 因为上下文的不同而不同。 一236~ ●编译器包含错误。~个语言的编译器是一个软件工具.它编译代码井不总是正确 的.例如可能在某些情况下它没有遵守语言标准,或者它本身就有错误.因为c语言比较 复杂,所以编译器的作者也会错误理解标准而使编译的执行出错. ●运行时的错误。编译时正确的代码在执行时也可能出错.所以要在运行时建立可执 行代码的检查.探测类似数据方面的错误并采取相应的措旌.c语言在运行时的检查是很 少的.这也是C生成的代码小而高效的原因之一.但是付出的代价就是运行时错误出现的 增多.c编译器对经常出现的运行错误不提供检查.这些错误包括算法异常(例如除数是 O)、溢出、指针地址的有效性和数组边界的错误. 正是因为存在着以上这些不安全因素.所以在一个相对安全的环境中使用c就是一个 Sot=tware 引起广泛关注的问题.为了提高C语言的安全可靠性,MISRA(MotorIndustry ReliabilityAssociation)协会提供了在软件开发过程中使用的一组度量方法。 二、度量规则的说明 对于嵌入式的自动化系统,C语言的度量规则可以分为两种:“要求使用的”规则和“建 议使用的”规则.要求使用的规则对于程序员来说是强迫执行的.所有的C代码都应该遵 循这些规则。建议使用的规则一般情况下也应该是程序员遵循的规则,但是并不是强制执 行的。所有的规则都在C语言的不同标题下组织起来.但是其中不可避免会有交迭的现象t 即一个规则可能与多个标题相关. C语言的度量规则以如下形式表示: text【.source∞争1 Rulenumber(category):requirement 其中,number是每一个规则的唯一代码;category是类别,即“要求使用的”和“建 三、具体的度量规则 3.1环境 Rule 1(要求使用的):所有代码应该与不带扩展的[S09899标准C~致. RuIe 2(建议使用的):要使用除了C以外的其它语言代码,必须有一个为目标代码定 义的接口标准.这个标准是所有语言的编译器和汇编程序都遵守的。 RuIe3(建议使用的):C中调用的汇编函数应该被写成内嵌汇编语言的c函数的样子, 内嵌的汇编语言不应该被嵌入在正常的C代码中a

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档