1,逻辑错误
(1) 使用前先初始化所有变量
(2) 注意 break 和 continue 语句的控制流向
(3)检查 C 操作符的相关性和优先顺序确保正确使用
(4)确保循环边界的正确性
(5)不要越界检索数组
(6)确保变量未被截短取值
(7)正确使用引用指针变量
(8)检查指针递增与递减
(9)检查逻辑操作 or 和 and 的正确使用
(10)正确使用赋值与等于(==)操作符
(11)确保位域数据类型是 unsigned 或 enum
(12)正确使用逻辑 and 和 MASK(采样)操作
(13)检查条件预处理
(14)检查注释的边界
(15)只对无符号(unsigned)变量做“==0”或“!=0”的判断
2,主要的接口错误
(1)确保所有函数调用的参数和返回值类型和函数定义一致
(2)函数和全局变量的声明(Declarations)和定义(Definitions)须完备
(3)使用合理数量的函数传参
(4)核实宏的正确使用(例如,full context(正确的上下文环境??))
(5)遵循函数参数和全局变量的命名标准
(6)采用防御性的编程技巧
(7)确保系统进程入口点的正确性
(8)利用函数返回值否则将其转换为 void 类型
(9)函数调用时确保括号正确使用
(10)在可能的情况下采用子系统提供初始化函数
(11)尽可能利用库函数或者已有的函数
3,主要的可维护性问题
(1)使用宏使代码更易于阅读并且(或者)更加灵活
(2)带有参数的宏的参数名称应该具备描述性
(3)不能由于宏定义而隐藏重要细节、关键操作或者副作用(Side Effect)
(4)避免因不恰当地在循环中使用goto 和 break 而导致程序打结
(5)运用结构中的位域元素以避免通过 shift 或 mask 操作直接存取位域
(6)用头文件包含(#include)所有全局或局部头文件都将用到的定义
(7)在一系列相互排他的可能选择条件情况下采用 if-else 代码序列,而不是一连串的 if 语句
(8)采用 #define 常量而不是直接在代码中嵌入数值
(9)运用括号来理清并确保正确的运算顺序
(10)用括号“{”来封闭流控制语句的实体代码
(11)参数尽可能利用前面用 struct/union/typedef 定义过的数据类型
(12)尽可能使用已有的 #feature 语句
(13)源文件和函数应遵循标准的版面编排规则
(14)尽可能使用库函数而不是重写代码
(15)在恰当的情况下,尽可能采用枚举而不是常数
(16)提供含义清楚、意义明确的注释