首页 > 代码库 > MISRA C 4
MISRA C 4
19、预处理指令
1、文件中的#include语句之前只能是其他预处理指令或注释
2、#include指令中的头文件名字里不能出现非标准字符
3、#include预处理指令应该跟随<filename>或“filename”序列
4、C的宏只能扩展为用大括号括起来的初始化、常量、小括号括起来的表达式、类型限定符、存储类标识符或do-while-zero
5、宏不能在块中进行#define和#undef
6、不要使用#undef
7、函数的使用优先选择函数宏(function-like macro)
8、函数宏的调用不能缺少参数
9、传递给函数宏的参数不能包含看似预处理指令的标记。
10、在定义函数宏时,每个参数实例都应该以小括号括起来,除非他们做为#或##的操作数
11、预处理指令中所有宏标识符在使用前都应先定义,除了#ifdef和#ifndef指令及define()操作符
12、在单一的宏定义中最多可以出现一次#和##预处理器操作符
13、不要使用#或##预处理器操作符。
14、defined预处理器操作符只能使用两种标准形式之一
15、应该采取防范措施以避免一个头文件的内容被包含两次
16、预处理指令在句法上应该是有意义的,即使是在被预处理器排除的情况下
17、所有的#else、#elif和#endif预处理指令应该同与他们相关的#if或#ifdef指令放在相同的文件中
标准库
1、标准库中保留的标识符、宏和函数不能被定义、重定义或取消定义
2、不能重用标准库中宏、对象和函数的名字
3、传递给库函数的值必须检查其有效性
4、不能使用动态堆的内存分配
5、不要使用错误指示errno
6、不应使用库<stdde.h>中的宏offsetof
7、不应使用setjmp宏和longjmp函数
8、不应使用信号处理工具<signal.h>
9、在产品代码中不应使用输入/输出库<stdio.h>
10、不应使用库<stdlib.h>中的函数atof、atoi和atol
11、不应使用库<stdlib.h>中的函数abort、exit、getenv和system
12、不应使用库<time.h>中的时间处理函数
运行时错误
1、最大限度降低运行时错误必须确保至少使用了下列方法之一:
a) 静态分析工具/技术
b)动态分析工具/技术
c)显示的代码检测以处理运行时故障
MISRA C 4