《MISRA-C 2004工业标准化的C编程规范》笔记——常量、声明与定义

来源:互联网 发布:数据修约标准 编辑:程序博客网 时间:2024/05/22 13:45

目录

  • 目录
  • 常量
  • 声明与定义

常量

规则7.1(强制):不应使用八进制常量(0除外)和八进制escape序列。
任何以0开始的整型常量都被看做是八进制的。
如:
052——八进制,即为十进制的42。

声明与定义

规则8.1(强制):函数应当具有原型声明,且原型在函数的定义和调用范围内都是可见的。
建议:
在头文件中声明函数(即给出其原型),并在所有需要该函数原型的代码文件中包含这个头文件。
为具有内部链接的函数给出其原型也是良好的编程实践。
规则8.2(强制):不论何时声明或定义一个对象或函数,它的类型都应显示声明。

extern x; /* Non-compliant – implicit int type */extern int16_t x ; /* Compliant – explicit type */const y ; /* Non-compliant – implicit int type */const int16_t y ; /* Compliant – explicit type */static foo (void) ; /* Non-compliant – implicit type */static int16_t foo (void) ; /* Compliant – explicit type */

规则8.3(强制):函数的每个参数类型在声明和定义中必须是等同的,函数的返回类型也应是等同的。
参数和返回值的类型在原型和定义中必须是匹配的。
要求:等同的基本类型,包含typedef名称和限定词在内的类型也要相同。

规则8.5(强制):头文件不应有对象或函数的定义。
头文件:用于声明对象、函数、typedef和宏,不应包含或生成占据存储空间的对象或函数的定义。
这样就清晰的划清了:
只有C文件才包含可执行的源代码,
头文件只能包含声明。

规则8.6(强制):函数应该声明为具有文件作用域。
在块作用域中声明函数,会引起混淆并可能导致未定义的行为。

规则8.7(强制):如果对象的访问只是在单一的函数中,那么对象应该在块范围内声明。
可能的情况,对象的作用域应该限制在函数内。
只有当对象需要具有内部或外部链接时才能为期使用文件作用域——全局变量,尽量不用

规则8.8(强制):外部对象或函数应该声明在唯一的文件中。
任何一个外部对象或函数,都只能在一个头文件中声明。

规则8.10(强制):在文件范围内声明和定义的所有对象或者函数应该具有内部链接,除非是在需要外部链接的情况下。
一个变量只是在被同一个文件中的函数所使用,那么就是用static。
如果一个函数只是在同一个文件中的其他地方调用,那么就用static.
使用static存储类表示符,将确保:
标识符只是在声明它的文件中使可见的,
避免了和其他文件或库中的相同标识符发生混淆的可能性。

规则8.11(强制):static存储类标识符应该用于具有内部链接的对象和函数的定义和声明。
把static关键字一致地在所有具有内部链接的对象和函数的声明上。

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

int array1[10] ; /* Compliant */extern int array2[] ; /* Not compliant */int array2[] = { 0, 10, 15 }; /* Compliant */
原创粉丝点击