论坛元老
- 威望
- 1580
- 贡献
- 1596
- 热心值
- 0
- 金币
- 1758
- 注册时间
- 2022-6-29
|
编写高质量代码:改善C程序代码的125个建议 - 建议 1:认识 ANSI C 1
- 建议 2:防止整数类型产生回绕与溢出 6 - 建议 2-1:char 类型变量的值应该限制在 signed char 与 unsigned char 的交集范围内
- 建议 2-2:使用显式声明为 signed char 或 unsigned char 的类型来执行算术运算
- 建议 2-3:使用 rsize_t 或 size_t 类型来表示一个对象所占用空间的整数值单位
- 建议 2-4:禁止把 size_t 类型和它所代表的真实类型混用
- 建议 2-5:小心使用无符号类型带来的陷阱
- 建议 2-6:防止无符号整数回绕
- 建议 2-7:防止有符号整数溢出
- 建议 3:尽量少使用浮点类型
- 建议 3-1:了解 IEEE 754 浮点数
- 建议 3-2:避免使用浮点数进行精确计算
- 建议 3-3:使用分数来精确表达浮点数
- 建议 3-4:避免直接在浮点数中使用“ == ”操作符做相等判断 47
- 建议 3-5:避免使用浮点数作为循环计数器
- 建议 3-6:尽量将浮点运算中的整数转换为浮点数
- 建议 4:数据类型转换必须做范围检查
- 建议 4-1:整数转换为新类型时必须做范围检查
- 建议 4-2:浮点数转换为新类型时必须做范围检查
- 建议 5:使用有严格定义的数据类型 - 建议 6:使用 typedef 来定义类型的新别名
- 建议 6-1:掌握 typedef 的 4 种应用形式
- 建议 6-2:小心使用 typedef 带来的陷阱
- 建议 6-3:typedef 不同于 #define
- 建议 7:变量声明应该力求简洁
- 建议 7-1:尽量不要在一个声明中声明超过一个的变量
- 建议 7-2:避免在嵌套的代码块之间使用相同的变量名
- 建议 8:正确地选择变量的存储类型
- 建议 8-1:定义局部变量时应该省略 auto 关键字
- 建议 8-2:慎用 extern 声明外部变量
- 建议 8-3:不要混淆 static 变量的作用
- 建议 8-4:尽量少使用 register 变量
- 建议 9:尽量不要在可重入函数中使用静态(或全局)变量
- 建议 10:尽量少使用全局变量
- 建议 11:尽量使用 const 声明值不会改变的变量
- 建议 12:尽量减少使用除法运算与求模运算
- 建议 12-1:用倒数相乘来实现除法运算
- 建议 12-2:使用牛顿迭代法求除数的倒数
- 建议 12-3:用减法运算来实现整数除法运算
- 建议 12-4:用移位运算实现乘除法运算
- 建议 12-5:尽量将浮点除法转化为相应的整数除法运算
- 建议 13:保证除法和求模运算不会导致除零错误
- 建议 14:适当地使用位操作来提高计算效率
- 建议 14-1:尽量避免对未知的有符号数执行位操作
- 建议 14-2:在右移中合理地选择 0 或符号位来填充空出的位
- 建议 14-3:移位的数量必须大于等于 0 且小于操作数的位数
- 建议 14-4:尽量避免在同一个数据上执行位操作与算术运算
- 建议 15:避免操作符混淆
- 建议 15-1:避免“=”与“==”混淆 92
- 建议 15-2:避免“|”与“||”混淆 94
- 建议 15-3:避免“&”与“&&”混淆 95
- 建议 16:表达式的设计应该兼顾效率与可读性 95
- 建议 16-1:尽量使用复合赋值运算符 95
- 建议 16-2:尽量避免编写多用途的、太复杂的复合表达式 97
- 建议 16-3:尽量避免在表达式中使用默认的优先级 98
- 建议 17:if 语句应该尽量保持简洁,减少嵌套的层数
- 建议 17-1:先处理正常情况,再处理异常情况
- 建议 17-2:避免“悬挂”的 else
- 建议 17-3:避免在 if/else 语句后面添加分号“;”
- 建议 17-4:对深层嵌套的 if 语句进行重构
- 建议 18:谨慎 0 值比较
- 建议 18-1:避免布尔型与 0 或 1 进行比较
- 建议 18-2:整型变量应该直接与 0 进行比较
- 建议 18-3:避免浮点变量用“==”或“!=”与 0 进行比较
- 建议 18-4:指针变量应该用“==”或“!=”与 NULL 进行比较
- 建议 19:避免使用嵌套的“?:”
- 建议 20:正确使用 for 循环
- 建议 20-1:尽量使循环控制变量的取值采用半开半闭区间写法
- 建议 20-2:尽量使循环体内工作量达到最小化
- 建议 20-3:避免在循环体内修改循环变量
- 建议 20-4:尽量使逻辑判断语句置于循环语句外层
- 建议 20-5:尽量将多重循环中最长的循环放在最内层,最短的循环放在最外层
- 建议 20-6:尽量将循环嵌套控制在 3 层以内
- 建议 21:适当地使用并行代码来优化 for 循环
- 建议 22:谨慎使用 do/while 与 while 循环
- 建议 22-1:无限循环优先选用 for( ; ; ),而不是 while(1)
- 建议 22-2:优先使用 for 循环替代 do/while 与 while 循环
|
|