内容检查

  1. if (a == b) 是否有写成 if (a = b)的,同时可以通过把常量写在左边,变量写在右边来进行预防
  2. printf输出参数的个数、格式、内容是否匹配
  3. 只在源文件内部使用的函数、变量等是否加了static进行限定
  4. 对于BOOL型的变量判0只能使用 if (flag) 或者 if (!flag) 而不能使用 if (flag == TRUE)if (flag != TRUE)
  5. 对于非BOOL型变量判0则正好相反,逻辑表达需要明确给出,数值判断必须使用定义的宏,只能使用例如 if (x != LACP_EMPTY) 不能使用 if (!x),相应的对于布尔型就只能使用如 if (flag),不同再进行判断
  6. 如果为提供给外部调用的接口函数,是否对入参进行各种合法性的细致检查
  7. 信号量操作地方严格检查,防止死锁,需要跳出的地方需要使用goto而不能直接return
  8. 每个switch的case后面是否都加了break,包括default后面
  9. 指针输出是否使用%p

    内存检查

  10. malloc申请内存后是否判申请失败

  11. malloc申请内存成功后是否进行初始化
  12. free(p)后是否使用 p = NULL 将指针赋空
  13. free(p)前是否判断 p == NULL 防止释放空指针
  14. 数组、内存使用前是否进行初始化(统一在使用前进行初始化,定义前可不初始化)
  15. 临时变量定义时是否初始化

    格式检查

  16. 指针前是否加p前缀进行标识

  17. 结构体、枚举格式是否统一,容易识别,如定义别名,然后结构体后面统一加 _s,枚举后面加 _e
  18. if、for、do后面是否带了空格
  19. 是否使用“半开半闭”区间进行条件判断 例:for (i = 0; i <= 9; i++) 应改为 for (i = 0; i < 10; i++)
  20. 每个switch的case后面是否都加了break,包括default后面。
  21. 是否使用默认优先级 例:if (a > b && c < d) 应改为 if ((a > b) && (c < d)) 也即能用括号括起的地方都进行括起
  22. 常量数值是否使用宏进行替代
  23. define中的是否加括号进行限定 例:#define a b 应改为 #define a (b)

  24. 不带参数的函数是否申明为了具有VOID类型的参数,也即INT32 a(VOID);
  25. 函数参数中只用于传参的指针前面是否加了const进行限定