Misra-c 2012 规则 自学笔记 简化版((百度,谷歌,有道)机翻+整理)

规范设计

实施

Dir 1.1 要求 应记录和理解程序输出所依赖的任何实施定义行为

编译和构建

Dir 2.1 要求 所有源文件应无任何编译错误

需求可追溯性

Dir 3.1 要求 所有代码应可追溯到文件要求

代码设计

Dir 4.1 要求 运行时故障应最小化

Dir 4.2 建议 汇编语言的所有用法都应记录在案

Dir 4.3 要求 汇编语言应封装和隔离

Dir 4.4 建议 代码的部分不应被“注释掉”(用宏注释,不要用// ,/**/等注释)

Dir 4.5 建议 在同一命名空间中具有重叠可见性的咨询标识应在排版上明确无误(命名相同的地方应该合理区分不要通过改变近似符号区分,比如替换大小写等)

Dir 4.6 建议 指示大小和符号的建议类型定义应代替基本的数字类型。

Dir 4.7 要求 如果函数返回错误信息,则应测试该错误信息

Dir 4.8 建议 如果指向结构或联合的指针在翻译单元中从未被取消引用,那么应该隐藏对象的实现

Dir 4.9 建议 函数应优先于宏之类的函数使用,因为它们是可互换的

Dir 4.10 要求 应采取必要的预防措施,以防止标题文件的内容被多次包含

Dir 4.11 要求 应检查传递给库函数的值的有效性

Dir 4.12 要求 不得使用动态内存分配(必须指定内存大小)

Dir 4.13 建议 旨在提供资源操作的咨询功能应按适当顺序调用

标准C环境

Rule 1.1 要求 程序不得违反标准C语法和约束,且不得超过实现的翻译限制

Rule 1.2 建议 不应使用咨询性语言扩展(方便移植)

Rule 1.3 要求 不得出现未定义或关键的未指定行为

未使用的代码

Rule 2.1 要求 不得包含无法到达的代码(所有代码均能跑到,没有废代码)

Rule 2.2 要求 没有死代码(能够执行但是没有实质作用的代码为死代码)

Rule 2.3 建议 项目不应包含未使用的类型

Rule 2.4 建议 项目不应包含未使用的标记

Rule 2.5 建议 项目不应包含未使用的宏

Rule 2.6 建议 函数不应包含未使用的标签

Rule 2.7 建议 函数中不应有未使用的参数

评论

Rule 3.1 要求 字符序列中不能使用/*和//作为注释(字符串中不能用注释,代码注释正常使用//)

Rule 3.2 要求 //注释不能用\拼接

字符集和词汇约定

Rule 4.1 要求 八进制和十六进制转义序列应进行术语化(用\x1f这种)

Rule 4.2 建议 不得使用三个连续字符

识别者

Rule 5.1 要求 外部标识应不同(所有命名都要有区分)

Rule 5.2 要求 在同一范围和名称空间中声明的所需标识应不同

Rule 5.3 要求 在内部范围内声明的标识不得隐藏在外部范围内声明的标识(内部不应该与外部重名,否则会覆盖)

Rule 5.4 要求 宏标识应不同

Rule 5.5 要求 标名称识应与宏名称不同

Rule 5.6 要求 typedef名称应是唯一的标识

Rule 5.7 要求 标签名称应为唯一标识

Rule 5.8 要求 定义具有外部连接的对象或功能的所需标识应是唯一的

Rule 5.9 建议 内部链接对象或功能的标识应是唯一的

类型

Rule 6.1 要求 位字段只能用适当的类型声明

Rule 6.2 要求 单个位命名的位字段不应为带符号类型

文字和常数

Rule 7.1 要求 不得使用八进制常数

Rule 7.2 要求 “u”或“u”后缀应应用于以无符号类型表示的所有整数常量

Rule 7.3 要求 小写字符“l”不得用于文字后缀

Rule 7.4 要求 除非对象的类型是“指向常量限定字符的指针”,否则不得将字符串文字指定给对象

声明和定义

Rule 8.1 要求 明确规定所需类型

Rule 8.2 要求 函数类型应配置命名以及原形参数

Rule 8.3 要求 对象或函数的所有声明应使用相同的名称和类型限定符

Rule 8.4 要求 当定义具有外部链接的对象或函数时,兼容声明应可见

Rule 8.5 要求 外部对象或功能只能在一个文件声明一次

Rule 8.6 要求 具有外部链接的标识符应具有一个外部定义

Rule 8.7 建议 如果函数和对象仅在一个翻译单元中引用,则不应使用外部链接来定义它们

Rule 8.8 要求 静态存储类规范应用于所有具有内部链接的对象和函数的声明中

Rule 8.9 建议 如果对象的标识符仅出现在单个函数中,则应在块范围内定义该对象

Rule 8.10 要求 内联函数应使用静态存储类声明

Rule 8.11 建议 声明具有外部链接的数组时,应显式指定其大小

Rule 8.12 要求 在枚举器列表中,隐式指定枚举常量的值应是唯一的

Rule 8.13 建议 指针应尽可能指向常量限定类型

Rule 8.14 要求 不得使用限制型限定符

初始化

Rule 9.1 强制 具有自动存储持续时间的对象的值在设置之前不得读取

Rule 9.2 要求 聚合或联合的初始值设定项应括在大括号中

Rule 9.3 要求 数组不应部分初始化

Rule 9.4 要求 一个对象的一个元素不能被初始化超过一次

Rule 9.5 要求 使用指定的初始化器初始化数组对象时,应明确指定数组的大小

本质类型模型

Rule 10.1 要求 操作数不应是不适当的基本类型

Rule 10.2 要求 本质上字符类型的表达式不得在加法和减法运算中不当使用

Rule 10.3 要求 表达式的值不应分配给具有较窄基本类型或不同基本类型类别的对象

Rule 10.4 要求 执行通常算术转换的运算符的两个操作数应具有相同的基本类型类别

Rule 10.5 建议 不应将表达式的值转换为不适当的基本类型

Rule 10.6 要求 复合表达式的值不应分配给具有更广泛本质类型的对象

Rule 10.7 要求 如果一个复合表达式用作一个运算符的一个操作数,在该运算符中执行通常的算术转换,则另一个操作数的基本类型不应较宽

Rule 10.8 要求 复合表达式的值不得转换为不同的基本类型或更广泛的基本类型

指针类型转换

Rule 11.1 要求 不得在指向函数的指针和任何其他类型的指针之间进行所需的转换

Rule 11.2 要求 不应在指向不完整类型的指针和任何其他类型的指针之间进行所需的转换

Rule 11.3 要求 不得在指向对象类型的指针和指向不同对象类型的指针之间执行强制转换

Rule 11.4 建议 不应在指向对象的指针和整数类型之间执行转换

Rule 11.5 建议 不应执行从指针到void到指针到对象的转换

Rule 11.6 要求 不应在指向void的指针和算术类型之间执行强制转换

Rule 11.7 要求 不应在指向对象的指针和非整数算术类型之间执行强制转换

Rule 11.8 要求 强制转换不应从指针指向的类型中删除任何 const 或 volatile 限定

Rule 11.9 要求 宏NULL应是唯一允许的整数NULL指针常量形式

表达

Rule 12.1 建议 表达式中运算符的优先级应明确

Rule 12.2 要求 移位运算符的右手操作数应位于比左手操作数的基本类型的位宽度小 0 到 1 的范围内

Rule 12.3 建议 不应使用逗号运算符

Rule 12.4 建议 常量表达式的建议性求值不应导致无符号整数环绕

副作用

Rule 13.1 要求 初始化列表不应包含持久的副作用

Rule 13.2 要求 在所有允许的评估顺序下,表达式的值及其持续的副作用应相同

Rule 13.3 建议 包含增量(++)或减量(--)运算符的完整表达式除了由增量运算符或减量运算符引起的作用外,不应有其他潜在的副作用

Rule 13.4 建议 不应使用赋值运算符的结果

Rule 13.5 要求 逻辑&&或| |运算符的右手操作数不应包含持久的副作用

Rule 13.6 强制 sizeof运算符的操作数不得包含任何具有潜在副作用的表达式

控件语句表达式

Rule 14.1 要求 循环计数器本质上不应具有浮点类型

Rule 14.2 要求 for 循环应该是格式良好的

Rule 14.3 要求 控制表达式不应是不变的

Rule 14.4 要求 if语句的控制表达式和迭代语句的控制表达式应具有基本上布尔型

控制层

Rule 15.1 建议 不应使用 goto 语句

Rule 15.2 要求 goto 语句应跳转到稍后在同一函数中声明的标签

Rule 15.3 要求 goto 语句引用的任何标签都应在同一块中或在包含 goto 语句的任何块中声明

Rule 15.4 建议 不应有超过一个用于终止任何迭代语句的 break 或 goto 语句

Rule 15.5 建议 一个函数应该在末尾有一个单一的退出点

Rule 15.6 要求 迭代语句或选择语句的主体应为复合语句

Rule 15.7 要求 所有 if ... else if 构造都应以 else 语句终止

switch语句

Rule 16.1 要求 所有 switch 语句都应格式正确

Rule 16.2 要求 仅当最紧密封闭的复合语句是 switch 语句的主体时,才应使用 switch 标签

Rule 16.3 要求 无条件的 break 语句应终止每个 switch 子句

Rule 16.4 要求 每个 switch 语句都应该有一个默认标签

Rule 16.5 要求 默认标签应作为 switch 语句的第一个或最后一个 switch 标签出现

Rule 16.6 要求 每个 switch 语句应至少有两个 switch 子句

Rule 16.7 要求 switch-expression本质上不应具有布尔类型

功能

Rule 17.1 要求 不得使用<stdarg.h>的特性

Rule 17.2 要求 函数不能直接或间接地调用自身

Rule 17.3 强制 不应隐式声明函数

Rule 17.4 强制 具有非空返回类型的函数的所有退出路径都应具有带有表达式的显式返回语句

Rule 17.5 建议 与声明为具有数组类型的参数对应的函数参数应具有适当数量的元素

Rule 17.6 强制 数组参数的声明不应在 [ ] 之间包含静态关键字

Rule 17.7 要求 应使用具有非空返回类型的函数返回的值

Rule 17.8 建议 不应修改功能参数

指针和数组

Rule 18.1 要求 指针操作数上的算术结果的指针应与该指针操作数的数组相同

Rule 18.2 要求 指针之间所需的减法只能应用于地址相同数组元素的指针

Rule 18.3 要求 关系运算符>、>=、<和<=不应应用于指针类型的对象,除非它们指向同一对象

Rule 18.4 建议 +、-、+=和-=运算符不应应用于指针类型的表达式

Rule 18.5 建议 声明应包含不超过两级指针嵌套

Rule 18.6 要求 自动存储的对象的地址不得复制到在第一个对象不存在后继续存在的另一个对象

Rule 18.7 要求 不应声明动态数组成员

Rule 18.8 要求 不应使用可变长度的数组类型

重叠存储

Rule 19.1 强制 不得将对象分配或复制到重叠对象

Rule 19.2 建议 不应使用union关键字

预处理指令

Rule 20.1 建议 #include 指令应该只在预处理器指令或注释之前

Rule 20.2 要求 '、" 或 \ 字符以及 /* 或 // 字符序列不得出现在头文件名中

Rule 20.3 要求 #include 指令后应为 <filename> 或“filename”序列

Rule 20.4 要求 宏不得与关键字同名

Rule 20.5 建议 不应使用 #undef

Rule 20.6 要求 看起来像预处理指令的标记不应出现在宏参数中

Rule 20.7 要求 由宏参数扩展产生的表达式应括在括号中

Rule 20.8 要求 #if 或 #elif 预处理指令的控制表达式应评估为 0 或 1

Rule 20.9 要求 在#if 或#elif 预处理指令的控制表达式中使用的所有标识符都应在评估之前#define

Rule 20.10 建议 不应使用 # 和 ## 预处理器运算符

Rule 20.11 要求 紧跟在 # 运算符之后的宏参数不应紧跟在 ## 运算符之后

Rule 20.12 要求 用作 # 或 ## 运算符的操作数的宏参数,其本身需要进一步宏替换,只能用作这些运算符的操作数

Rule 20.13 要求 第一个标记为 # 的行应为有效的预处理指令

Rule 20.14 要求 所有#else、#elif 和#endif 预处理器指令应与它们相关的#if、#ifdef 或#ifndef 指令驻留在同一文件中

标准库

Rule 21.1 要求 #define 和 #undef 不得用于保留标识符或保留宏名称

Rule 21.2 要求 不得声明保留标识符或宏名称

Rule 21.3 要求 不使用<stdlib.h>的内存分配和释放功能

Rule 21.4 要求 不得使用标准头文件 <setjmp.h>

Rule 21.5 要求 不得使用标准头文件 <signal.h>

Rule 21.6 要求 不得使用标准库输入/输出函数

Rule 21.7 要求 不得使用 <stdlib.h> 的 atof、atoi、atol 和 atol 函数

Rule 21.8 要求 不得使用 <stdlib.h> 的库函数 abort、exit、getenv 和 system

Rule 21.9 要求 不得使用<stdlib.h>的库函数b search和qsort

Rule 21.10 要求 不使用标准库时间和日期功能

Rule 21.11 要求 不得使用标准头文件 <tgmath.h>

Rule 21.12 建议 不应使用<fenv.h>的异常处理特性

资源

Rule 22.1 要求 通过标准库功能动态获取的所有资源应明确释放

Rule 22.2 强制 只有通过标准库函数分配的内存块才能被释放

Rule 22.3 要求 相同文件不得同时在不同流上打开读写访问

Rule 22.4 强制 不得尝试写入以只读方式打开的流

Rule 22.5 强制 指向 FILE 对象的指针不应取消引用

Rule 22.6 强制 关联流关闭后,指向 FILE 的指针的值不得使用

————————————————

原文链接:https://blog.csdn.net/qht88212/article/details/118668853

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值