MISRA-C-2004(工业标准的 C 编程规范中文版)
### MISRA-C-2004(工业标准的 C 编程规范中文版) #### 1. 背景——C的使用和问题 ##### 1.1 汽车工业中C的使用 MISRA-C:1998发布于1998年,随着技术的发展和需求的变化,MISRA-C:2004作为修订版本被推出,旨在解决自第一个版本发布以来所遇到的新问题。在汽车工业领域中,C语言因其灵活性、广泛的硬件支持以及良好的性能而成为开发实时嵌入式系统的首选语言。 在汽车行业中,C语言的应用日益广泛,主要归因于以下几个方面: 1. **硬件兼容性**:对于大多数微处理器而言,C语言是最常用的编程语言之一,尤其是在缺乏其他高级语言支持的情况下更是如此。 2. **底层操作支持**:C语言提供了强大的底层操作能力,非常适合进行高速数据处理、底层输入/输出操作等,这些都是汽车嵌入式系统的核心功能。 3. **高级语言的优势**:随着软件系统复杂度的增加,使用高级语言(如C语言)而非汇编语言可以提高开发效率和代码的可维护性。 4. **代码效率**:相比于其他一些高级语言,C语言通常能够生成更紧凑的代码,占用较少的内存资源,这对于资源受限的嵌入式设备尤为重要。 5. **可移植性需求**:市场竞争促使软件需要能够在不同硬件平台上轻松迁移,以适应不断变化的技术环境并降低成本。 6. **自动化代码生成**:随着模型驱动开发方法的普及,自动从模型生成C代码的需求也在不断增加。 7. **开放系统兴趣增长**:随着软件开发模式的发展,对于开放系统和宿主环境的支持变得更加重要。 ##### 1.2 语言的不安全性和C语言 尽管C语言具有诸多优点,但它本身也存在一些安全隐患。编程语言无法确保生成的代码完全按照开发者的预期执行。以下是几种可能的程序员错误及C语言中存在的不安全性示例: 1. **程序员错误**:常见的错误包括拼写错误、逻辑错误或对算法的理解偏差。这些问题可能导致代码执行不符合预期。 2. **语言特性导致的错误**:C语言的某些特性可能会让一些常见的错误变得更隐蔽,例如将逻辑比较符号“==”误写为赋值符号“=”等。 3. **语法错误**:C语言允许某些类型的语法错误通过编译,比如if语句后面的多余分号,这种错误虽然不会导致编译失败,但却可能改变程序的逻辑流程。 #### 2. MISRA-C:愿景 ##### 2.1 MISRA-C的发布说明 MISRA-C:2004是在MISRA-C:1998的基础上发展而来,旨在针对第一版发布后遇到的新挑战和问题提供更新的指导原则。这一版本着重于提高代码的安全性和可靠性,同时保持C语言的灵活性和效率。 ##### 2.2 MISRA-C的目标 MISRA-C的目标在于为C语言在关键系统中的应用提供一套指导原则,确保代码的质量、一致性和安全性。这些目标的实现对于保证软件的可靠性和减少潜在的风险至关重要。 #### 3. MISRA-C:范围 ##### 3.1 基本的语言问题 MISRA-C关注于解决C语言的基本问题,如语法、数据类型、表达式等,确保这些基础元素的正确使用。 ##### 3.2 未指出的问题 除了基本问题外,MISRA-C还注意到了之前版本中未充分覆盖的一些问题,如异常处理机制等,旨在提供更加全面的指导。 ##### 3.3 可应用性 MISRA-C不仅适用于传统的汽车工业领域,也适用于其他需要高可靠性的行业,如航空航天、医疗设备等。 ##### 3.4 预备知识 对于开发者而言,了解MISRA-C的基本原则和要求是非常重要的。开发者需要具备一定的C语言基础知识,并且熟悉MISRA-C的规则。 ##### 3.5 C++问题 MISRA-C主要关注C语言,但对于那些使用C++进行关键系统开发的情况,也有一些相关的指导原则可供参考。 ##### 3.6 自动产生代码的问题 MISRA-C还考虑了由工具自动生成的代码可能带来的问题,并提供了一套评估和验证这类代码的标准。 #### 4. 使用MISRA-C ##### 4.1 软件工程环境 MISRA-C不仅仅是一套编程指南,它还涉及整个软件工程环境,包括开发过程、质量保证体系等。 ##### 4.2 编程语言和编码环境 MISRA-C强调了选择合适的编程语言和编码环境的重要性,以确保代码的质量和可靠性。 ##### 4.3 采用子集(subset) MISRA-C建议在必要时采用语言子集,以减少潜在的安全隐患。 ##### 4.4 符合性声明(Claiming compliance) 对于遵循MISRA-C的项目,明确声明其符合性非常重要,这有助于建立信任和满足合规要求。 ##### 4.5 持续改进 MISRA-C鼓励持续改进,这意味着随着技术的进步和新问题的出现,规则和指导原则也应该随之更新和发展。 #### 5. 规则简介 MISRA-C将规则分为多个类别,每个类别都涵盖了特定方面的指导原则,以帮助开发者更好地理解和应用这些规则。 1. **规则分类**:根据规则的目的和适用范围进行分类。 2. **规则的组织**:规则按照逻辑顺序组织,便于查找和理解。 3. **规则的冗余**:避免规则之间的重复,确保每条规则都是独特的。 4. **规则的形式**:规定了规则的表述方式,以便于理解和遵循。 5. **理解原始参考**:解释如何正确解读规则背后的原则和意图。 6. **规则的范围**:明确了规则的应用范围,确保开发者清楚哪些情况适用。 #### 6. 规则 MISRA-C的具体规则覆盖了C语言的各个方面,从环境配置到具体的语法细节,旨在帮助开发者写出高质量的代码。以下是一些核心规则的概述: 1. **环境**:包括编译器的选择、开发环境的设置等。 2. **语言扩展**:讨论了C语言标准之外的一些扩展用法。 3. **文档**:强调了编写清晰文档的重要性,以提高代码的可维护性。 4. **字符集**:规范了使用的字符集和编码标准。 5. **标识符**:规定了命名规则,以增强代码的可读性和一致性。 6. **类型**:定义了不同类型的数据表示方法。 7. **常量**:阐述了常量的使用规则。 8. **声明与定义**:说明了变量声明和定义的要求。 9. **初始化**:规定了变量初始化的方法。 10. **数值类型转换**:讨论了数值类型转换时需要注意的问题。 11. **指针类型转换**:阐明了指针类型转换的相关规则。 12. **表达式**:介绍了合法表达式的构成要素。 13. **控制语句表达式**:描述了条件语句和循环语句的使用规则。 14. **控制流**:规范了程序流程控制的方式。 15. **switch语句**:规定了switch语句的使用准则。 16. **函数**:定义了函数的定义和调用规则。 17. **指针和数组**:讨论了指针和数组的操作规范。 18. **结构与联合**:解释了结构体和联合体的使用方法。 19. **预处理指令**:说明了宏定义和其他预处理指令的使用规则。 20. **标准库**:列举了标准库函数的使用注意事项。 21. **运行时错误**:列出了常见的运行时错误及其处理方法。 通过遵循这些规则,开发者可以显著提高代码的安全性和可靠性,减少潜在的安全隐患,从而确保软件在关键系统中的稳定运行。
剩余85页未读,继续阅读
- ztime19822019-07-17已经下载过了,可以参考
- qiangliaozhou37182017-11-28我觉得可以
- nidecuoma2019-01-13资源很好 里面有不少东西
- as7817133952017-12-11资源很好 里面有不少东西
- 粉丝: 17
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 项目采用YOLO V4算法模型进行目标检测,使用Deep SORT目标跟踪算法 .zip
- 针对实时视频流和静态图像实现的对象检测和跟踪算法 .zip
- 部署 yolox 算法使用 deepstream.zip
- 基于webmagic、springboot和mybatis的MagicToe Java爬虫设计源码
- 通过实时流协议 (RTSP) 使用 Yolo、OpenCV 和 Python 进行深度学习的对象检测.zip
- 基于Python和HTML的tb商品列表查询分析设计源码
- 基于国民技术RT-THREAD的MULTInstrument多功能电子测量仪器设计源码
- 基于Java技术的网络报修平台后端设计源码
- 基于Python的美食杰中华菜系数据挖掘与分析设计源码
- 基于Java与JavaScript混合技术的吉森摄影项目设计源码