内容检查
if (a == b)是否有写成if (a = b)的,同时可以通过把常量写在左边,变量写在右边来进行预防- printf输出参数的个数、格式、内容是否匹配
- 只在源文件内部使用的函数、变量等是否加了static进行限定
- 对于BOOL型的变量判0只能使用
if (flag)或者if (!flag)而不能使用if (flag == TRUE)或if (flag != TRUE) - 对于非BOOL型变量判0则正好相反,逻辑表达需要明确给出,数值判断必须使用定义的宏,只能使用例如
if (x != LACP_EMPTY)不能使用if (!x),相应的对于布尔型就只能使用如if (flag),不同再进行判断 - 如果为提供给外部调用的接口函数,是否对入参进行各种合法性的细致检查
- 信号量操作地方严格检查,防止死锁,需要跳出的地方需要使用goto而不能直接return
- 每个switch的case后面是否都加了break,包括default后面
-
内存检查
malloc申请内存后是否判申请失败
- malloc申请内存成功后是否进行初始化
- free(p)后是否使用
p = NULL将指针赋空 - free(p)前是否判断
p == NULL防止释放空指针 - 数组、内存使用前是否进行初始化(统一在使用前进行初始化,定义前可不初始化)
-
格式检查
指针前是否加p前缀进行标识
- 结构体、枚举格式是否统一,容易识别,如定义别名,然后结构体后面统一加
_s,枚举后面加_e - if、for、do后面是否带了空格
- 是否使用“半开半闭”区间进行条件判断 例:
for (i = 0; i <= 9; i++)应改为for (i = 0; i < 10; i++) - 每个switch的case后面是否都加了break,包括default后面。
- 是否使用默认优先级 例:
if (a > b && c < d)应改为if ((a > b) && (c < d))也即能用括号括起的地方都进行括起 - 常量数值是否使用宏进行替代
define中的是否加括号进行限定 例:
#define a b应改为#define a (b)- 不带参数的函数是否申明为了具有VOID类型的参数,也即
INT32 a(VOID); - 函数参数中只用于传参的指针前面是否加了const进行限定
