首页 > 代码库 > 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