\MISRA-C2004 规则常用要点

### MISRA-C:2004 规则常用要点详解 #### 规则2.1:强制 — 汇编语言应该被封装并隔离 **背景与意义:** 本条规则强调了在C代码中使用汇编语言时的正确做法。由于汇编语言通常与处理器紧密相关,因此在C代码中直接混合汇编代码可能会导致代码难以维护和移植。通过封装和隔离汇编代码,可以更好地控制其使用范围,并提高代码的整体质量。 **具体要求:** - **封装方式:** 使用汇编函数、C函数或宏来封装汇编代码。 - **示例:** - **汇编函数:** ```c extern void asm_function(void); ``` - **C函数:** ```c void c_function(void) { __asm__("nop"); } ``` - **宏定义:** ```c #define NOP __asm__("nop") ``` **注意事项:** - 尽量减少汇编代码的使用,以保持代码的可读性和可移植性。 - 如果确实需要使用汇编,确保它被正确封装,并且只在必要时使用。 #### 规则2.2:强制 — 源代码应该使用 /*…*/ 类型的注释 **背景与意义:** 注释是代码中不可或缺的一部分,能够帮助开发者理解和维护代码。C语言支持两种类型的注释:`//` 和 `/* ... */`。为了保持一致性以及避免潜在问题,本规则推荐使用 `/* ... */` 形式的注释。 **具体要求:** - **推荐使用:** `/* ... */` 类型的注释。 **注意事项:** - 避免使用 `//` 注释,尤其是多行注释,因为它可能导致代码难以阅读。 - 保持注释的清晰和简洁。 #### 规则2.4:建议 — 代码段不应被注释掉 **背景与意义:** 本规则建议不要通过注释的方式禁用代码段,而是使用条件编译来实现这一目标。这种方式更加安全,也更易于管理。 **具体要求:** - **使用条件编译:** ```c #if 0 // 被禁用的代码 #endif ``` **注意事项:** - 不要使用 `/* ... */` 来注释掉整个代码段,因为这可能导致错误。 - 使用条件编译可以更灵活地控制代码是否被编译。 #### 规则5.1:强制 — 标识符的有效字符不能多于31 **背景与意义:** 此规则旨在限制标识符的长度,从而避免因标识符过长而导致的潜在问题。大多数编译器对标识符的最大长度有限制,通常为31个字符。 **具体要求:** - **最大长度:** 31个字符。 **注意事项:** - 超过31个字符的标识符可能会被截断,导致意外的行为。 - 应该尽可能使用简短且有意义的标识符。 #### 规则6.1:强制 — 单纯的char类型应该只用做存储和使用字符值 **背景与意义:** `char` 类型主要用于存储和处理字符数据,而非数值数据。这有助于避免因数据类型误用而导致的潜在问题。 **具体要求:** - **使用场景:** 存储和使用字符值。 **注意事项:** - 不要在需要数值计算的地方使用 `char` 类型。 - 使用 `char` 时要清楚它是用来表示字符还是作为数值使用。 #### 规则6.2:强制 — signed char 和 unsigned char 类型应该只用做存储和使用数字值 **背景与意义:** 与 `char` 类型不同,`signed char` 和 `unsigned char` 主要用于存储数值数据。明确指定符号性可以帮助避免因数据类型混淆而引发的问题。 **具体要求:** - **使用场景:** 存储和使用数字值。 **注意事项:** - 在需要精确控制数值范围时使用 `signed char` 或 `unsigned char`。 - 不要在需要存储字符数据的地方使用这两种类型。 #### 规则6.3:建议 — 应该使用指示了大小和符号的typedef以代替基本数据类型 **背景与意义:** 使用 `typedef` 定义特定长度的数据类型有助于提高代码的可读性和可维护性,同时也便于跨平台开发。 **具体要求:** - **推荐使用:** 特定长度的 `typedef`。 **示例代码:** ```c typedef signed char int8_t; typedef unsigned char uint8_t; ``` **注意事项:** - 使用 `typedef` 定义数据类型时要注意底层实现,以确保跨平台兼容性。 - 选择合适的 `typedef` 名称以便于理解其用途。 #### 规则6.4:强制 — 位域只能被定义为unsigned int 或 signed int 类型 **背景与意义:** 位域是一种特殊的结构成员,用于将多个布尔值压缩到单个整数中。此规则规定了位域的类型限制,以确保一致性和可预测性。 **具体要求:** - **类型限制:** `unsigned int` 或 `signed int`。 **注意事项:** - 使用正确的类型定义位域以匹配实际需求。 - 遵守这些限制有助于避免类型不匹配的问题。 #### 规则6.5:强制 — int 类型的位域至少应该为2bits长度 **背景与意义:** 此规则规定了位域的最小长度,以避免使用无效的位域长度。 **具体要求:** - **最小长度:** 2bits。 **注意事项:** - 1bit 的有符号位域是没有意义的,应该避免使用。 - 选择合适的位域长度可以提高代码的效率。 #### 规则7.1:强制 — 不应使用八进制常量(零除外)和八进制 escape 序列 **背景与意义:** 在现代编程实践中,八进制常量和八进制转义序列的使用较少,本规则旨在避免潜在的混淆和错误。 **具体要求:** - **禁止使用:** 八进制常量(除了零)和八进制转义序列。 **注意事项:** - 使用十进制、十六进制或字符串转义序列来替代。 - 这有助于提高代码的可读性和避免不必要的复杂性。 #### 规则8.5:强制 — 头文件中不应有对象或函数的定义 **背景与意义:** 头文件主要用于声明类型、函数原型等,而不是定义具体的对象或函数。这样的分离有助于提高代码的组织性和可维护性。 **具体要求:** - **禁止定义:** 对象或函数定义。 **注意事项:** - 只在头文件中进行声明。 - 定义应该放在单独的 C 文件中。 #### 规则8.8:强制 — 外部对象或函数应该声明在唯一的文件中 **背景与意义:** 本规则确保每个外部对象或函数都有一个明确的声明位置,有助于避免命名冲突和提高代码的可维护性。 **具体要求:** - **唯一文件:** 每个外部对象或函数应该在一个头文件中声明。 **注意事项:** - 避免重复声明。 - 保持清晰的文件结构。 #### 规则8.10:强制 — 在文件范围内声明和定义的所有对象或函数应该具有内部链接,除非是在需要外部链接的情况下 **背景与意义:** 此规则有助于控制变量和函数的作用范围,以避免不必要的全局访问,并提高代码的安全性和可维护性。 **具体要求:** - **默认链接属性:** 内部链接。 - **特殊情况:** 需要外部链接时使用 `extern` 关键字。 **注意事项:** - 使用 `static` 关键字来限制作用域。 - 避免不必要的全局变量。 #### 规则9.1:强制 — 所有自动变量在使用前都应被赋值 **背景与意义:** 本规则要求所有局部变量在使用之前必须先初始化。这样可以防止使用未初始化的变量,避免潜在的程序错误。 **具体要求:** - **初始化:** 自动变量使用前必须初始化。 **注意事项:** - 初始化可以是显式的赋值,也可以是使用默认值。 - 确保变量在使用前已正确初始化。 #### 规则10.5:强制 — 如果位运算符~和<<应用在基本类型为 unsigned char 或 unsigned short 的操作数,结果应该立即强制转换为操作数的基本类型 **背景与意义:** 在处理位运算时,尤其是在涉及较小的整数类型时,确保结果被正确地转换回原类型可以避免数据丢失和溢出问题。 **具体要求:** - **类型转换:** 结果应立即转换回操作数的基本类型。 **示例代码:** ```c unsigned char x = 0x01; unsigned char y = ~x; unsigned char z = x << 1; ``` **注意事项:** - 确保类型转换是正确的。 - 使用小整数类型时要特别小心数据溢出。 以上规则为 MISRA-C:2004 中的部分常用规则概述,遵循这些规则有助于编写高质量、高可靠性的软件代码。

































剩余6页未读,继续阅读

- 土豆毛线2015-12-04这个不全,不过重要的都有了
- kink0072015-03-27好像不全啊?
- #积跬步以至千里2012-07-23不是总共有144条规则吗?求全
- chanali2018-07-05本身标准也不多,建议直接看标准原文

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 探究计算机应用软件的开发和维护.docx
- 基于城市商业银行视角下区块链技术应用探析.docx
- ATS单片机的教室灯光智能控制系统设计.doc
- 大数据环境下的数据安全治理探讨V5.docx
- 《电子商务基础与实操》电子商务概述.ppt
- 宁夏银川酒店综合布线与报价书.doc
- 超全汇总!计算机视觉项目源码的部署教程链接大盘点
- 基于 OpenCV 计算机视觉的物品分拣开源项目学习交流
- mcmthesis-ThesisNote-美赛资源
- Flet窗口左上角默认图标更换自定义标准模板
- 基于 OpenCV 的计算机视觉与图像处理实战个人项目
- vcos_apps-智能车资源
- 蓝桥杯单片机真题代码-蓝桥杯资源
- Professional Assembly Language-汇编语言资源
- 计算机视觉算法岗面试备战:常考算法实现要点梳理
- 小程序商城源码-Java-C语言资源


