编号:
项目编号 | 项目名称 | ||
检查人 | 检查日期 |
检查内容 | 是否涵盖 |
一、变量声明 | |
1.变量命名是否直观,前缀是否表示了变量类型 | 是 否 |
2.宏定义和常量是否全用大写的字母 | 是 否 |
3.静态变量是否加前缀s_ | 是 否 |
4.全局变量是否尽可能的少用,全局变量是否加前缀g_ | 是 否 |
5.是否尽量避免了使用强制类型转换;如果不得不作类型转换,是否用了显式方式 | 是 否 |
6.是否在定义变量的同时初始化该变量 | 是 否 |
是否没有定义了但不使用的变量 | 是 否 |
二、基本语句 | |
7.是否没有将浮点变量用“==”或“!=”与数字比较 | 是 否 |
8.是否没有在for 循环体内修改循环变量 | 是 否 |
9.在循环中是否谨慎的使用了break和continue,没有将需要在break或continue之前处理的语句写到了其后 | 是 否 |
10.每个case语句的结尾是否都有break,除了有意设计的重叠 | 是 否 |
11.switch后是否都有最后的default分支 | 是 否 |
12.是否没有使用goto语句 | 是 否 |
三、结构体和指针 | |
13.结构体初始化和善后是否都清空了 | 是 否 |
14.是否成对使用了malloc, free,没有未释放的内存或者释放未申请的无效地址 | 是 否 |
15.Malloc后是否检查了分配成功 | 是 否 |
16.释放前是否检查了不为NULL,释放后是否及时置NULL | 是 否 |
四、函数设计 | |
17.函数体的规模是否控制在200行代码之内,单个函数的分支路径是否控制在10条以内; 除了函数入口处的参数合法性检查外,函数出口是否尽可能唯一 | 是 否 |
18.是否显式定义了返回类型,并有返回值; 19.对重要的被调函数,调用后是否判断了返回值 | 是 否 |
20.如果参数是指针,且仅作输入用,是否在类型前加const, | 是 否 |
21.函数的参数个数是否控制在5个以内,如果有个别函数超过5个参数,那么这类函数占整个软件的百分比是否<5% | 是 否 |
22.是否使用了类型和数目不确定参数的函数(除了调试打印的printf) | 是 否 |
六、程序版式 | |
23.函数之前和之后是否都加空行 | 是 否 |
24.函数体内的空行是否合适 | 是 否 |
25.一行代码是否只做一件事情 | 是 否 |
26.if、for、while、do等语句是否自占一行 | 是 否 |
27.分界符‘{’和‘}’是否独占一行并且位于同一列,同时与引用它们的语句左对齐 | 是 否 |
28.缩进是否合格 | 是 否 |
29.每行代码的长度是否在80个字符以内 | 是 否 |
30.注释是否及时更新,与代码一致; 31.注释和代码的比例是否达到1:5 | 是 否 |
32.复杂段落的结束处是否加了注释 | 是 否 |
33.源程序头的注释是否合格 | 是 否 |
34.函数头的注释是否合格 | 是 否 |
35.头文件是否使用ifndef/define/endif结构产生预处理块 | 是 否 |
37.用 #include “filename.h”
格式来引用非标准库的头文件 | 是 否 |
38.是否对项目专用的功能用编译选项隔离 | 是 否 |
39.6.走查时其他注意的地方 | |
40.If、else等分支的逻辑,特别是嵌套时,是否和设计意图一致 | 是 否 |
41.是否有无用的代码和注释 | 是 否 |
42.对数组的边界操作是否合适,没有越界 | 是 否 |
43.循环时的最大、最小边界是否正确 | 是 否 |
44.重要的算法是否易于理解、维护 | 是 否 |