在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → 汽车和轨道交通行业遵循的标准MisraC2004逐条示例(MisraC-2004Manual.chm)

汽车和轨道交通行业遵循的标准MisraC2004逐条示例(MisraC-2004Manual.chm)

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.11M
  • 下载次数:8
  • 浏览次数:86
  • 发布时间:2020-12-15
  • 实例类别:嵌入式开发
  • 发 布 人:bjjette
  • 文件格式:.chm
  • 所需积分:2
 相关标签: AB 程序 编码规范

实例介绍

【实例简介】将MisraC 2004的每个条款进行示例分解举例。

【实例截图】

【目录】

MISRA C 2004 [MISRA2004] 
规则 

[MISRA2004-2_1] 汇编代码应该是封装且独立的 [MISRA2004-2_1]
[MISRA2004-2_2] 源代码只能使用 /* ... */ 来注释 [MISRA2004-2_2]
[MISRA2004-2_3] 禁止在 C 语言风格的注释中使用 /* 字符序列 [MISRA2004-2_3]
[MISRA2004-2_4] 代码段不应该被“注释掉” [MISRA2004-2_4]
[MISRA2004-3_4] 使用 #pragma 语句必须进行说明 [MISRA2004-3_4]
[MISRA2004-3_5] 不要把位域和其他数据混合在同一个结构体里 [MISRA2004-3_5]
[MISRA2004-4_1] 应只使用 ISO C 标准中定义的转义字符 [MISRA2004-4_1]
[MISRA2004-4_2] 禁止使用三字母词 [MISRA2004-4_2]
[MISRA2004-5_1] 标识符的长度不能超过 31 个字符 [MISRA2004-5_1]
[MISRA2004-5_2_a] 在局部或者函数原型体范围内声明的标识符不应该隐藏一个在全局或者命名空间范围内声明的标识符 [MISRA2004-5_2_a]
[MISRA2004-5_2_b] 在内层的局部范围内声明的标识符不应该隐藏在外层的局部范围内声明的标识符 [MISRA2004-5_2_b]
[MISRA2004-5_3_a] 不能重用 typedef 名称 [MISRA2004-5_3_a]
[MISRA2004-5_3_b] 不能将 typedef 的名称重用在另一个 typedef 名称 [MISRA2004-5_3_b]
[MISRA2004-5_4_a] 在程序中标记(tag)的名称不得重用于其它目的 [MISRA2004-5_4_a]
[MISRA2004-5_4_b] 标记(tag)的名称不得被重用于定义一个不同的标号 [MISRA2004-5_4_b]
[MISRA2004-5_4_c] typedef 的名称不应该与 typdef 指定的类型名称相同 [MISRA2004-5_4_c]
[MISRA2004-5_5_a] 禁止重用静态存储周期的对象或函数的标识符 [MISRA2004-5_5_a]
[MISRA2004-5_5_b] 禁止重用静态存储周期的对象或函数的标识符 [MISRA2004-5_5_b]
[MISRA2004-5_6] 除结构和联合成员名字外,一个命名空间内的标识符不能与另一个命名空间里面的标识符重名 [MISRA2004-5_6]
[MISRA2004-5_7] 禁止重用标识符名称 [MISRA2004-5_7]
[MISRA2004-6_1] 普通字符(plain char)类型只能用于存储和使用字符值 [MISRA2004-6_1]
[MISRA2004-6_2] 带符号的 char 和 不带符号的 char 类型只能用于存储和数值类型 [MISRA2004-6_2]
[MISRA2004-6_3] 用 typedef 定义基本类型应该在名称中包含数字 [MISRA2004-6_3]
[MISRA2004-6_3_b] typedefs 应该被用于替代基本类型 [MISRA2004-6_3_b]
[MISRA2004-6_4] 只能将位域定义为有符号的整型或无符号的整型 [MISRA2004-6_4]
[MISRA2004-6_5] 具有带符号的整数类型且已命名的位域应该有超过一位的长度 [MISRA2004-6_5]
[MISRA2004-6_5_a] signed整数型的未命名位域的长度应大于1bit [MISRA2004-6_5_a]
[MISRA2004-7_1_a] 不应该使用八进制常数(除零外) [MISRA2004-7_1_a]
[MISRA2004-7_1_b] 八进制转义序列不应该被使用 [MISRA2004-7_1_b]
[MISRA2004-8_10] 具有外部链接的对象或函数应该在头文件中声明 [MISRA2004-8_10]
[MISRA2004-8_11] 静态存储类说明符应该用于具有内部链接的对象和函数的定义和声明 [MISRA2004-8_11]
[MISRA2004-8_12] 当数组声明具有外部链接,其大小应该显式地说明或者在初始化时隐性地定义 [MISRA2004-8_12]
[MISRA2004-8_1_a] 函数应该有函数原型并且该原型应该对函数定义和调用可见 [MISRA2004-8_1_a]
[MISRA2004-8_1_b] 在函数调用时,函数总是有可见的原型 [MISRA2004-8_1_b]
[MISRA2004-8_2_a] 声明或定义某个函数时,必须显式地规定其类型 [MISRA2004-8_2_a]
[MISRA2004-8_2_b] 声明或定义某个对象时,必须显式地规定其类型 [MISRA2004-8_2_b]
[MISRA2004-8_3_a] 在声明和定义中使用相同的类型 [MISRA2004-8_3_a]
[MISRA2004-8_3_b] 函数的声明与原型的类型必须一致 [MISRA2004-8_3_b]
[MISRA2004-8_4] 如果对象或者函数被声明了一次以上,那么他们的类型应该是兼容的 [MISRA2004-8_4]
[MISRA2004-8_5] 在头文件中不应定义函数和对象 [MISRA2004-8_5]
[MISRA2004-8_6] 在文件的范围内声明函数 [MISRA2004-8_6]
[MISRA2004-8_7] 如果对象只在一个单独的函数中访问那么应定义其在代码块范围 [MISRA2004-8_7]
[MISRA2004-9_1] 所有自动变量在使用之前都必须被赋值 [MISRA2004-9_1]
[MISRA2004-9_2] 聚合体和共同体的初始化对象应该用大括号括起来 [MISRA2004-9_2]
[MISRA2004-9_2_b] 数组不应该部分初始化 [MISRA2004-9_2_b]
[MISRA2004-9_2_c] 结构的非零初始化要求每个元素都有显示初始化器 [MISRA2004-9_2_c]
[MISRA2004-9_3] 在枚举类型中,要么仅对第一个元素进行显式地初始化,要么所有元素都进行显式的初始化 [MISRA2004-9_3]
[MISRA2004-10_1_a] 避免无符号整型和有符号整型之间隐式地转换 [MISRA2004-10_1_a]
[MISRA2004-10_1_b] 不存在从整型到浮点型的隐式转换 [MISRA2004-10_1_b]
[MISRA2004-10_1_c] 避免隐式的复合表达式的数据类型转换 [MISRA2004-10_1_c]
[MISRA2004-10_1_d] 避免从更宽到更窄的类型的隐式转换 [MISRA2004-10_1_d]
[MISRA2004-10_1_e] 避免隐式的函数返回表达式类型转换 [MISRA2004-10_1_e]
[MISRA2004-10_1_f] 避免隐式的复合表达式的类型转换 [MISRA2004-10_1_f]
[MISRA2004-10_1_g] 避免函数参数进行隐式地类型转换 [MISRA2004-10_1_g]
[MISRA2004-10_1_h] 避免隐式的无符号整型和有符号整型的转换 [MISRA2004-10_1_h]
[MISRA2004-10_1_i] 避免隐式的复合表达式的数据类型转换 [MISRA2004-10_1_i]
[MISRA2004-10_2_a] 避免从浮点类型到整型的隐式转换 [MISRA2004-10_2_a]
[MISRA2004-10_2_b] 避免宽字段到窄字段浮点型数据的隐式转换 [MISRA2004-10_2_b]
[MISRA2004-10_2_c] 避免隐式的窄字段到宽字段浮点型数据转换 [MISRA2004-10_2_c]
[MISRA2004-10_2_d] 避免将浮点数从较宽的浮点类型隐式转换为较窄的浮点类型 [MISRA2004-10_2_d]
[MISRA2004-10_3] 整型复合表达式的值只能被强制转换到较短的类型,或者与该表达式类型相同的有符号类型 [MISRA2004-10_3]
[MISRA2004-10_4] 浮点类型的复杂表达式的值只能转换为精度较低的浮点类型 [MISRA2004-10_4]
[MISRA2004-10_5] 如果对无符号字符型或无符号短整型进行 ~ 和 << 位运算后,其结果应立即强制转换成操作数的基本类型 [MISRA2004-10_5]
[MISRA2004-10_6] 无符号类型的所有常量应该使用 'U' 后缀 [MISRA2004-10_6]
[MISRA2004-11_1] 除了整数类型外不允许其他类型和函数指针进行类型转换 [MISRA2004-11_1]
[MISRA2004-11_2] 对象指针只能被转换成整数类型,与对象同类型的指针和 void 指针 [MISRA2004-11_2]
[MISRA2004-11_2_b] 对象指针只能被转换成整数类型,与对象同类型的指针和 void 指针 [MISRA2004-11_2_b]
[MISRA2004-11_2_c] 对象指针只能被转换成整数类型,与对象同类型的指针和 void 指针 [MISRA2004-11_2_c]
[MISRA2004-11_3_a] 不允许指针类型和整数类型之间进行类型转换 [MISRA2004-11_3_a]
[MISRA2004-11_3_b] 禁止将其它类型变量强制转换成指针变量 [MISRA2004-11_3_b]
[MISRA2004-11_4] 不应在指向对象类型的指针和指向对象类型的其他指针之间执行强制转换 [MISRA2004-11_4]
[MISRA2004-11_5] 强制转换不得从指针或引用类型中删除任何“const”或“volatile”限定条件 [MISRA2004-11_5]
[MISRA2004-12_10] 不应该使用逗号运算符 [MISRA2004-12_10]
[MISRA2004-12_12] 禁止对浮点数值进行位操作 [MISRA2004-12_12]
[MISRA2004-12_13] 禁止在同一个表达式中混合使用递加符 ( ) 和递减符 (--) 与其他运算符 [MISRA2004-12_13]
[MISRA2004-12_1_a] 谨慎使用 C 语言中表达式的优先运算规则 [MISRA2004-12_1_a]
[MISRA2004-12_1_b] 谨慎使用 C 语言中表达式的优先运算规则 [MISRA2004-12_1_b]
[MISRA2004-12_1_c] 一元运算符的操作数不需要括号 [MISRA2004-12_1_c]
[MISRA2004-12_1_d] 谨慎使用 C 语言中表达式的优先运算规则 [MISRA2004-12_1_d]
[MISRA2004-12_1_e] 除非表达式中的所有运算符都相同,否则使用圆括号 [MISRA2004-12_1_e]
[MISRA2004-12_1_f] 谨慎使用 C 语言中表达式的优先运算规则 [MISRA2004-12_1_f]
[MISRA2004-12_2_a] 表达式的值应该在任何标准允许的赋值顺序下是一样的 [MISRA2004-12_2_a]
[MISRA2004-12_2_b] 不要编写依赖于函数参数求值顺序的代码 [MISRA2004-12_2_b]
[MISRA2004-12_2_c] 不要编写依赖于函数标志符和函数参数的求值顺序的代码 [MISRA2004-12_2_c]
[MISRA2004-12_2_d] 涉及一个函数调用时,不要编写依赖表达式求值顺序的代码 [MISRA2004-12_2_d]
[MISRA2004-12_2_e] 在序列点之间,对象的存储值最多只能通过表达式的计算来修改一次 [MISRA2004-12_2_e]
[MISRA2004-12_2_f] 不要在两个相邻的序列点之间使用多个 volatile [MISRA2004-12_2_f]
[MISRA2004-12_2_g] 不要编写依赖于函数调用求值顺序的代码 [MISRA2004-12_2_g]
[MISRA2004-12_3] sizeof运算符的操作数不应包含任何有副作用的表达式 [MISRA2004-12_3]
[MISRA2004-12_3_b] 不应在sizeof运算符的操作数中访问由volatile左值指定的对象 [MISRA2004-12_3_b]
[MISRA2004-12_3_c] 会导致副作用的函数调用不应该用作 sizeof 运算符的操作数 [MISRA2004-12_3_c]
[MISRA2004-12_4_a] 逻辑&&或||运算符的右操作数不得含有副作用 [MISRA2004-12_4_a]
[MISRA2004-12_5] 逻辑运算符 && 或者 || 的操作数应该是基本表达式 [MISRA2004-12_5]
[MISRA2004-12_6_a] 逻辑运算符 (&&"," || 和 !) 的操作数应该是有效的布尔值 [MISRA2004-12_6_a]
[MISRA2004-12_6_b] 有效布尔值的表达式不应该用作除 (&&", ||, !, =, ==, !=," ?:) 之外的运算符的操作数。 [MISRA2004-12_6_b]
[MISRA2004-12_7] 禁止对有符号类型使用位操作 [MISRA2004-12_7]
[MISRA2004-12_8] 一个移位操作符的右操作数应该位于 0 到 1 之间,小于左操作数底层类型的位宽 [MISRA2004-12_8]
[MISRA2004-12_9] 一元减法运算符不得适用于其原始类型是无符号型的表达式 [MISRA2004-12_9]
[MISRA2004-13_1] 禁止在产生布尔值的表达式中使用赋值运算符 [MISRA2004-13_1]
[MISRA2004-13_2] 测试一个值是否为零应该是显式的,除非操作数实际上是布尔值 [MISRA2004-13_2]
[MISRA2004-13_3] 禁止对浮点数类型的表达式做相等或不相等的比较 [MISRA2004-13_3]
[MISRA2004-13_4] for 循环语句中的控制表达式不能包含浮点类型对象 [MISRA2004-13_4]
[MISRA2004-13_5] for 循环语句的三个表达式应该仅与循环控制相关 [MISRA2004-13_5]
[MISRA2004-13_6] 禁止在循环体中修改循环计数器 [MISRA2004-13_6]
[MISRA2004-13_7_a] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_a]
[MISRA2004-13_7_aa] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_aa]
[MISRA2004-13_7_ab] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ab]
[MISRA2004-13_7_ac] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ac]
[MISRA2004-13_7_ad] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ad]
[MISRA2004-13_7_ae] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ae]
[MISRA2004-13_7_af] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_af]
[MISRA2004-13_7_ag] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ag]
[MISRA2004-13_7_ah] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ah]
[MISRA2004-13_7_ai] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ai]
[MISRA2004-13_7_aj] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_aj]
[MISRA2004-13_7_ak] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_ak]
[MISRA2004-13_7_b] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_b]
[MISRA2004-13_7_c] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_c]
[MISRA2004-13_7_d] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_d]
[MISRA2004-13_7_j] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_j]
[MISRA2004-13_7_k] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_k]
[MISRA2004-13_7_l] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_l]
[MISRA2004-13_7_m] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_m]
[MISRA2004-13_7_n] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_n]
[MISRA2004-13_7_s] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_s]
[MISRA2004-13_7_t] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_t]
[MISRA2004-13_7_u] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_u]
[MISRA2004-13_7_v] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_v]
[MISRA2004-13_7_w] 包含枚举的条件始终为 'true' 或 'false' [MISRA2004-13_7_w]
[MISRA2004-13_7_x] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_x]
[MISRA2004-13_7_y] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_y]
[MISRA2004-13_7_z] 不允许其结果是不变的布尔运算 [MISRA2004-13_7_z]
[MISRA2004-14_10] 所有 'if...else-if' 结构应使用一个 'else' 子句终止 [MISRA2004-14_10]
[MISRA2004-14_1_a] 在 ""else"" 语句块中不应存在执行不到的代码 [MISRA2004-14_1_a]
[MISRA2004-14_1_b] 在 'return'", 'break', 'continue'," 和 'goto' 语句之后不应存在执行不到的代码 [MISRA2004-14_1_b]
[MISRA2004-14_1_c] 在 ""if/else/while/for"" 语句块中不应存在执行不到的代码 [MISRA2004-14_1_c]
[MISRA2004-14_1_d] 在 switch 语句中不应存在执行不到的代码 [MISRA2004-14_1_d]
[MISRA2004-14_1_e] 在 'for' 循环中不应存在执行不到的代码 [MISRA2004-14_1_e]
[MISRA2004-14_1_f] 在 'if' 或 'switch' 语句后不应存在不可访问的代码 [MISRA2004-14_1_f]
[MISRA2004-14_1_g] 在 while/for/do...while 循环内的 ""if"" 或 ""switch"" 语句后不应存在执行不到的代码 [MISRA2004-14_1_g]
[MISRA2004-14_2] 所有非 null 语句应该至少有一个执行或者导致控制流变化的附加作用 [MISRA2004-14_2]
[MISRA2004-14_3] 空语句只允许单独存在一行或者可以在其后面跟着注释 [MISRA2004-14_3]
[MISRA2004-14_4] 不应该使用 goto 语句 [MISRA2004-14_4]
[MISRA2004-14_5] 不要使用 continue 语句 [MISRA2004-14_5]
[MISRA2004-14_6] 对任何循环语句,最多不应超过一个 break 语句用于循环终止 [MISRA2004-14_6]
[MISRA2004-14_7] 函数末端应只提供一个出口点 [MISRA2004-14_7]
[MISRA2004-14_8] 'switch'", 'while'," 'do...while' 或 'for' 语句的主体应该是复合语句 [MISRA2004-14_8]
[MISRA2004-14_9] 'if' 和 'else' 语句后应跟一个复合句 [MISRA2004-14_9]
[MISRA2004-15_0_a] break 语句应只出现在 switch 子句末端 [MISRA2004-15_0_a]
[MISRA2004-15_0_b] switch 语句应该只包含 switch 标签和 switch 子句,不能包含其他代码 [MISRA2004-15_0_b]
[MISRA2004-15_1] 只有当最紧密封闭的复合语句是 switch 语句主体的时才能使用 switch 标签 [MISRA2004-15_1]
[MISRA2004-15_2] 无条件的 break 语句应该作为每一个非空 case 子句的结束 [MISRA2004-15_2]
[MISRA2004-15_2_b] 无条件的 break 语句应作为所有非空 default 条件的结束 [MISRA2004-15_2_b]
[MISRA2004-15_3] switch 语句中最后必须为 default 子句 [MISRA2004-15_3]
[MISRA2004-15_4] switch 表达式不应该出现一个实际为布尔的值 [MISRA2004-15_4]
[MISRA2004-15_4_b] switch 表达式不应该出现一个实际为布尔的值 [MISRA2004-15_4_b]
[MISRA2004-15_5] 每一个 switch 语句至少有一个 case 子句 [MISRA2004-15_5]
[MISRA2004-16_1] 函数不应使用可变数量的参数定义 [MISRA2004-16_1]
[MISRA2004-16_10] 如果函数返回错误信息,则该错误信息必须经过测试 [MISRA2004-16_10]
[MISRA2004-16_2] 函数不应该直接或者间接地调用自己 [MISRA2004-16_2]
[MISRA2004-16_3] 在函数原型声明中应该为所有参数提供标识符 [MISRA2004-16_3]
[MISRA2004-16_4] 禁止函数声明中使用的标识符与实际定义中的标识符不一致 [MISRA2004-16_4]
[MISRA2004-16_5] 没有参数的函数必须声明参数类型为 void [MISRA2004-16_5]
[MISRA2004-16_6] 传递给函数的参数个数必须与函数定义的参数一致 [MISRA2004-16_6]
[MISRA2004-16_7] 如果函数参数中指针参数在函数中不用来修改地址对象,则应声明为 const 类型 [MISRA2004-16_7]
[MISRA2004-16_7_b] 如果指针不用于修改指向地址的对象则声明参数的类型为 typedef 的 const 指针 [MISRA2004-16_7_b]
[MISRA2004-16_8] 具有非空返回类型的函数的所有退出路径都应该有一个带有表达式的显式返回语句 [MISRA2004-16_8]
[MISRA2004-16_9] 函数标识符只能与前面的 '&' 一起使用,或者与括号中的参数列表一起使用,参数列表可以是空的 [MISRA2004-16_9]
[MISRA2004-17_1] 不要对那些没有指向数组或数组元素地址的指针进行指针运算 [MISRA2004-17_1]
[MISRA2004-17_2] 只有指向数组或数组元素地址的指针才能进行指针运算 [MISRA2004-17_2]
[MISRA2004-17_3] >", >=, <," <= 不应用于指针类型,除非它们指向相同的数组 [MISRA2004-17_3]
[MISRA2004-17_4] 只有数组索引才能进行算术指针操作 [MISRA2004-17_4]
[MISRA2004-17_5] 对象的声明应该包含不超过 2 层的指针嵌套 [MISRA2004-17_5]
[MISRA2004-17_6_a] 不得从函数中返回具有自动存储的对象的地址 [MISRA2004-17_6_a]
[MISRA2004-17_6_b] 自动存储对象的地址不应分配给在第一个对象不再存在后可能持久存在的另一个对象 [MISRA2004-17_6_b]
[MISRA2004-18_1] 在转换单元结束之前,所有的结构体和联合体必须有完整的声明 [MISRA2004-18_1]
[MISRA2004-18_2] 不应该将结构体自身的一个成员变量赋给另一个成员变量 [MISRA2004-18_2]
[MISRA2004-18_2_b] 结构体的每个成员不应该赋值给自己的其他成员变量 [MISRA2004-18_2_b]
[MISRA2004-18_4] 禁止使用联合体 [MISRA2004-18_4]
[MISRA2004-19_1] #include 之前只允许有预处理命令和注释 [MISRA2004-19_1]
[MISRA2004-19_10] 在类函数宏指令的定义中,参数的每个实例都应该用圆括号括起来,除非它用作 # 或者 ## 的运算对象 [MISRA2004-19_10]
[MISRA2004-19_11_b] 不要使用在编译单元中未定义的预编译器指令 #if 和 #elif 宏 [MISRA2004-19_11_b]
[MISRA2004-19_12] 禁止宏定义中使用多个 # 和 ## [MISRA2004-19_12]
[MISRA2004-19_13] 禁止使用预处理操作符 # 和 ## [MISRA2004-19_13]
[MISRA2004-19_14] 预处理操作符只能用在两种标准格式之一 [MISRA2004-19_14]
[MISRA2004-19_15] 必须采取预防措施以防止头文件的内容被引用两次 [MISRA2004-19_15]
[MISRA2004-19_16] 预处理指令即使被预处理程序排除","在语法上也是有意义的 [MISRA2004-19_16]
[MISRA2004-19_17] 在同一个文件中 #else"," #elif 和 #endif 必须对应有 #if 或 #ifdef 预处理指令 [MISRA2004-19_17]
[MISRA2004-19_2] 非标准字符不应该用于 #include 指令的头文件名称中 [MISRA2004-19_2]
[MISRA2004-19_3] #include 指令后面应当添加 <filename> 或是 ""filename"" [MISRA2004-19_3]
[MISRA2004-19_4] 避免宏定义中存在关键字和基本类型 [MISRA2004-19_4]
[MISRA2004-19_5] 禁止在块中使用 #define 或 #undef [MISRA2004-19_5]
[MISRA2004-19_6] 禁止使用 #undef [MISRA2004-19_6]
[MISRA2004-19_7] 函数应该优先于宏函数的使用 [MISRA2004-19_7]
[MISRA2004-19_8] 类似函数的宏在调用时参数个数必须一致 [MISRA2004-19_8]
[MISRA2004-19_9] 类似函数的宏的参数不应该包含类似预处理命令的标识 [MISRA2004-19_9]
[MISRA2004-20_10] 不得使用库stdlib.h中的库函数atof,atoi和atol [MISRA2004-20_10]
[MISRA2004-20_11] 'stdlib.h' 或者 'cstdlib' 库中的 'abort()' 函数不应该被使用 [MISRA2004-20_11]
[MISRA2004-20_11_b] 'stdlib.h' 或者 'cstdlib' 库中的 'exit()' 函数不应该被使用 [MISRA2004-20_11_b]
[MISRA2004-20_11_c] 不得使用 'stdlib.h' 或 'cstdlib' 库中的 'getenv()' 函数 [MISRA2004-20_11_c]
[MISRA2004-20_11_d] 不得使用 'stdlib.h' 或 'cstdlib' 库中的 'system()' 函数 [MISRA2004-20_11_d]
[MISRA2004-20_12] 禁止使用库文件 time.h 中的时间处理库函数 [MISRA2004-20_12]
[MISRA2004-20_1_a] 不要使用以下划线开头的带有#define 或 #undef 名称的标识符 [MISRA2004-20_1_a]
[MISRA2004-20_1_b] 不要重新定义保留字 [MISRA2004-20_1_b]
[MISRA2004-20_1_c] 在标准程序库中的保留标识符,宏以及函数不应该被定义,重定义或取消定义(C90代码 [MISRA2004-20_1_c]
[MISRA2004-20_1_e] 不要#define也不要#undef '已定义'的标识 [MISRA2004-20_1_e]
[MISRA2004-20_2] 标准库宏、对象和函数的名称不应该被重用 [MISRA2004-20_2]
[MISRA2004-20_2_a] 不应该重复使用标准库中的宏,对象和函数(C90) [MISRA2004-20_2_a]
[MISRA2004-20_2_b] 标准库宏,对象和函数的名称不得重复使用(C99) [MISRA2004-20_2_b]
[MISRA2004-20_3] 应检查传递给库函数的值的有效性 [MISRA2004-20_3]
[MISRA2004-20_4] 不应使用动态堆内存分配 [MISRA2004-20_4]
[MISRA2004-20_5] 不得使用错误指示 'errno' [MISRA2004-20_5]
[MISRA2004-20_6] 不应该使用库文件 stddef.h 中的 offsetof 宏 [MISRA2004-20_6]
[MISRA2004-20_7] 不使用 setjmp 宏和 longjmp 函数 [MISRA2004-20_7]
[MISRA2004-20_7_b] 不要使用标准头文件 <setjmp.h> [MISRA2004-20_7_b]
[MISRA2004-20_8] 禁止使用标准库文件 <signal.h> 中的处理函数 [MISRA2004-20_8]
[MISRA2004-20_8_b] 禁止使用信号处理文件 <signal.h> 中的处理函数 [MISRA2004-20_8_b]
[MISRA2004-20_9] 禁止使用库文件 stdio.h 中的输入/输出函数 [MISRA2004-20_9]



【核心代码】MisraC规定的各种代码要求

函数的声明与原型的类型必须一致 [MISRA2004-8_3_b]


说明

对于函数的每一个参数声明中给出的类型应该与定义
中给出的类型相同,返回值类型也应该是相同的。



优点
该规则防止产生不确定的行为并提高代码可读性。



示例
typedef int MyInt1;
typedef MyInt1 MyInt2;

void foo1( MyInt1 a, int b );	/* Violation */
void foo1( int a, MyInt1 b ) {}
void foo2( int a, MyInt1 b );	/* Violation */
void foo2( int a, MyInt2 b ) {}



修复
typedef int MyInt1;
typedef MyInt1 MyInt2;

void foo1( MyInt1 a, int b );   /* OK */
void foo1( MyInt1 a, int b ) {}
void foo2( int a, MyInt2 b );   /* OK */
void foo2( int a, MyInt2 b ) {}




标签: AB 程序 编码规范

实例下载地址

汽车和轨道交通行业遵循的标准MisraC2004逐条示例(MisraC-2004Manual.chm)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警