首页 > 代码库 > MISRA C编程规范(2)

MISRA C编程规范(2)

常量

规则7.1(强制):不应使用用八进制(零除外)和八进制escape序列。


声明与定义

规则8.1(强制):函数应当具有原型声明,且原型在函数的定义和调用范围内都是可见的。


规则8.2(强制):不论何时声明或定义了一个对象或函数,它的类型都应显式声明。


规则8.3(强制):函数的每个参数类型在申明和定义中必须等同的,函数的返回类型也该是等同的。


规则8.4(强制):如果对象或函数被声明了多次,那么它们的类型应该是兼容的。


规则8.5(强制):头文件中不应有对象或函数的定义。


规则8.6(强制):函数应该声明为具有文件作用域。


规则8.7(强制):如果对象的访问只是在单一的函数中,那么对象应该在块范围内声明。


规则8.8(强制):外部对象或函数应该声明在唯一的文件中。


规则8.9(强制):具有外部链接的标识符应该具有准确的外部定义。


规则8.10(强制):在文件范围内声明和定义的所有对象或函数具有内部链接,除非是在需要外部链接的情况下。


规则8.11(强制):static存储类标识符应该用于具有内部链接对象和函数的定义和声明。


规则8.12(强制):当一个数组声明具有外部链接,它的大小应该显式声明或通过初始化进行隐式定义。


初始化

规则9.1(强制):所有自动变量在使用前都应该被赋初值。

       The intent of this rule is that all variables shall have been written to before they are read. This does not neccessarily require initialisation at declaration.

Note that according to the ISO C statdard,variables with static storage duration are automatically initialised to zero by default ,unless explicitly initalised.In practise,many embedded enviroments tdo not implement this behaviours, Static storage duration is a property of all variables declared with the static storage class specifier,or with external linkage.Varigables with automatic storage duration are not usuallu automatically initialised.


规则9.2(强制):应该使用大括号一指示和匹配数组和结构的非零初始化构造。


规则9.3(强制):在枚举列表中,”=“不能显式用于除首元素之外的元素上,除非所有的元素都是显式初始化的。

 

数值转换


规则10.1(强制):下列条件成立时,整型表达时的值不应隐式转换为不同基本类型:

a) 转换不是带符号的向更宽整数类型的转换,或者

b)表达式是复杂的表达式,或者

b)表达式不是常量而是函数参数,或者

d)表达是不常量而是返回的表达式


规则10.2(强制):下列条件成立时,浮点类型表达的值不应隐式转换为不同的类型:

a)转换不是向更宽浮点类型的转换,或者

b)表达式是复杂表达式,或则

c)表达式是函数参数,或

d)表达式的返回表达式


规则10.3(强制):整型复杂表达式的值只能强制转换到更窄的类型且与表达式的基本类型具有相同的符号

规则10.4(强制):浮点类型表达式的值智能强制转换到更窄的浮点类型。

规则10.5(强制): 如果位运算~和<<应用在基本类型为unsigned char 或unsigned short的操作数,结果应该立即强制转换为操作数的基本类型。

规则10.6(强制):后缀”U“应该用在unsigned 类型的常量上。




MISRA C编程规范(2)