《MISRA-C-2012-AMD-2-规则最新中文版-20210512-》由会员分享,可在线阅读,更多相关《MISRA-C-2012-AMD-2-规则最新中文版-20210512-(7页珍藏版)》请在金锄头文库上搜索。
1、MISRA C AMD-2 规则2标准:MISRA C 2012规则 ID说明类别COVERITY支持指令 1.1应该记录并了解程序输出依赖的任何实现定义行为。必需否指令 2.1所有源文件应该在没有任何编译错误的情况下编译。必需否指令 3.1所有代码都必须能按照记录的要求进行跟踪。必需否指令 4.1应该最大限度减少运行时失败。必需否指令 4.2应该记录所有使用汇编语言的情况。建议否指令 4.3应该独立封装汇编语言。必需是指令 4.4不应将代码段“注释掉”。建议是指令 4.5同一命名空间中发生重叠的标识符在排字上应该清楚明确。建议是指令 4.6应该使用指示大小和符号的 typedef 代替基本数
2、值类型。建议是指令 4.7如果函数返回了错误信息,则应该测试该错误信息。必需是指令 4.8如果结构或 union 的指针在编译单元内从未被解引用,则应该隐藏该对象的实现。建议是指令 4.9如果函数和类似于函数的宏可互换,则应优先使用函数。建议是指令 4.10应注意防止头文件的内容出现多次。必需是指令 4.11应该检查传递给库函数的值的有效性。必需是指令 4.12不应使用动态内存分配。必需是指令 4.13应该按正确的顺序调用专门针对资源操作的函数。建议是指令 4.14应该检查从外部源接收的值的有效性。必需是 MISRA C 2012 AMD2 规则4标准:MISRA C 2012规则 ID说明类
3、别支持规则 1.1程序不应包含任何违反标准 C 语法和约束的情况,并且不应超出实现的转换限制。必需是规则 1.2不应使用语言扩展。建议是规则 1.3不应出现不确定行为或关键未指定行为。必需否规则 1.4Emergent language features shall not be used.必需是规则 2.1项目不应包含无法到达的代码。必需是规则 2.2不应存在无用代码。必需是规则 2.3项目不应包含未使用的类型声明。建议是规则 2.4项目不应包含未使用的标记声明。建议是规则 2.5项目不应包含未使用的宏声明。建议是规则 2.6函数不应包含未使用的标签声明。建议是规则 2.7函数中不应存在未使
4、用的参数。建议是规则 3.1不应在注释中使用字符序列 /* 和 /。必需是规则 3.2不应在 / 注释中使用行合并。必需是规则 4.1应该终止八进制和十六进制转义序列。必需是规则 4.2不应使用三字符组。建议是规则 5.1外部标识符应该是不同的。必需是规则 5.2在同一范围和命名空间中声明的标识符应该是不同的。必需是规则 5.3在内部范围中声明的标识符不应隐藏在外部范围中声明的标识符。必需是规则 5.4宏标识符应该是不同的。必需是规则 5.5标识符应该不同于宏名称。必需是规则 5.6typedef 名称应是唯一的标识符。必需是规则 5.7标记名称应是唯一的标识符。必需是规则 5.8使用外部链接
5、定义对象或函数的标识符应该唯一。必需是规则 5.9使用内部链接定义对象或函数的标识符应该唯一。建议是规则 6.1位域只应通过适当的类型声明。必需是规则 6.2单个位已命名位域不应是 signed 类型。必需是规则 7.1不应使用八进制常量。必需是规则 7.2应对unsigned类型中表示的所有整数常量应用“u”或“U”后缀。必需是规则 7.3不应在常数值后缀中使用小写字符“l”。必需是规则 7.4不应为对象分配字符串常量,除非该对象的类型为“const 限定 char指针”。必需是规则 8.1应显式指定类型。必需是规则 8.2函数类型应采用命名参数的原型形式。必需是规则 8.3对象或函数的所有
6、声明都应使用相同的名称和类型限定符。必需是规则 8.4当使用外部链接定义对象或函数时,兼容声明应该可见。必需是规则 8.5外部对象或函数应在一个且只应在一个文件中声明一次。必需是规则 8.6包含外部链接的标识符应只具有一个外部定义。必需是规则 8.7如果函数或对象只在一个编译单元中引用,则不应该使用外部链接定义该函数或对象。建议是规则 8.8应在包含内部链接的对象和函数的所有声明中使用static存储class说明符。必需是标准:MISRA C 2012规则 ID说明类别支持规则 8.9如果对象的标识符只出现在一个函数中,则应该在块范围内定义该对象。建议是规则 8.10inline 函数应该通
7、过 static 存储 class 声明。必需是规则 8.11在声明具有外部链接的数组时,应显式指定其大小。建议是规则 8.12在枚举器列表中,隐式指定的枚举常量的值应该唯一。必需是规则 8.13指针应尽量指向 const 限定类型。建议是规则 8.14不应使用限制类型限定符。必需是规则 9.1不应在设置具有自动存储期的对象的值之前读取该值。强制是规则 9.2聚合或 union 的初始化器应使用大括号括起。必需是规则 9.3不应将数组部分初始化。必需是规则 9.4对象的元素不应多次初始化。必需是规则 9.5使用指定的初始化器对数组对象执行初始化时,应显式指定数组的大小。必需是规则 10.1操作
8、数的类型不应是不恰当的基本类型。必需是规则 10.2不应在加法和减法运算中通过不当的方式使用基本字符类型的表达式。必需是规则 10.3不应将表达式的值赋值给为较窄的基本类型或不同基本类型类别的对象。必需是规则 10.4对运算符的两个操作数执行常用算术转换应该具有相同的基本类型类别。必需是规则 10.5不应将表达式的值转换为不适当的基本类型。建议是规则 10.6不应将复合表达式的值赋值给具有较宽基本类型的对象。必需是规则 10.7在常用算术转换中如果将复合表达式用作运算符的一个操作数,则另一个操作数不应具有较宽的基础类型。必需是规则 10.8不应将复合表达式的值转换为不同的基本类型类别或较宽的基
9、本类型。必需是规则 11.1指向函数的指针不应转换为任何其他类型。必需是规则 11.2指向不完整类型的指针不应转换为任何其他类型。必需是规则 11.3指向对象类型的指针不应转换为指向不同对象类型的指针。必需是规则 11.4指向对象的指针不应转换为整数类型。建议是规则 11.5指向 void 的指针不应转换为指向对象的指针。建议是规则 11.6指向 void 的指针不应转换为算术运算类型。必需是规则 11.7指向对象的指针不应转换为非整数算术运算类型。必需是规则 11.8指针所指向类型的转换不应移除任何const 或 volatile 属性。必需是规则 11.9宏 NULL 应该是唯一允许的整数
10、 null 指针常量形式。必需是规则 12.1运算符在表达式内的优先级应设置为 explicit。建议是规则 12.2移位 operator 的右操作数应介于零和左操作数基本类型 的位宽度之间。必需是规则 12.3不应使用逗号运算符。建议是规则 12.4常量表达式的求值不应导致unsigned的整数溢出。建议是规则 12.5sizeof 运算符的操作数不应是声明为“类型数组”的函数参数。强制是规则 13.1初始化器列表不应包含持久的其他作用。必需是规则 13.2在所有允许的评估顺序中表达式的值及其持久的其他作用应该保持相同。必需是规则 13.3包含递增 (+) 或递减 (-) 运算符的完整表达
11、式不应包含除了递增或递减运算符导致的影响之外的其他潜在作用。建议是标准:MISRA C 2012规则 ID说明类别支持规则 13.4不应使用赋值运算符的结果。建议是规则 13.5逻辑运算符 & 或 | 的右操作数不应包含持久的其他作用。必需是规则 13.6sizeof 运算符的操作数不应包含具有潜在其他作用的任何表达式。强制是规则 14.1循环计数器不应具有基本的浮点类型。必需是规则 14.2for 循环应该符合语法。必需是规则 14.3控制表达式不应是不变量。必需是规则 14.4if 语句的控制表达式和迭代语句的控制表达式应该具有基本的布尔类型。必需是规则 15.1不应使用 goto 语句。
12、建议是规则 15.2goto 语句应跳转到在同一函数后半部分中声明的标签。必需是规则 15.3goto 语句引用的任何标签都应在同一代码块或包括该 goto 语句的代码块中声明。必需是规则 15.4用于结束任何迭代语句的 break 或 goto 语句不应超过一个。建议是规则 15.5函数在结束处应该只有唯一的退出点。建议是规则 15.6迭代语句或选择语句的主体应该是复合语句。必需是规则 15.7所有 if .。else if 结构应以 else 语句结束。必需是规则 16.1所有 switch 语句都应该符合语法。必需是规则 16.2switch 标签只应在最里层的复合语句是 switch 语句的主体时使用