改善C语言程序代码的125个建议,第1到26个建议!

大家好,我是阿叔,专注分享产品、研发、管理等相关经验。

一共有125个改善C语言程序的建议,因为篇幅的原因,本文将第1到26个建议。其他的建议再下几篇文章发布。

注:可以分享“改善C语言程序代码的125个建议”完整的高清图片、思维导图源文件、excel文件资料的话。

1. 数据,程序设计之根本

建议1:认识ANSI C

建议2:防止整数类型产生回绕与溢出

建议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:避免直接在浮点数中使用“==”操作符做相等判断

建议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声明值不会改变的变量

2. 保持严谨的程序设计,一切从表达式开始做起

建议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:避免“=”与“==”混淆

建议15-2:避免“|”与“||”混淆

建议15-3:避免“&”与“&&”混淆

建议16:表达式的设计应该兼顾效率与可读性

建议16-1:尽量使用复合赋值运算符

建议16-2:尽量避免编写多用途的、太复杂的复合表达式

建议16-3:尽量避免在表达式中使用默认的优先级

3. 程序控制语句应该保持简洁高效

建议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循环

建议23:正确地使用switch语句

建议23-1:不要忘记在case语句的结尾添加break语句

建议23-2:不要忘记在switch语句的结尾添加default语句

建议23-3:不要为了使用case语句而刻意构造一个变量

建议23-4:尽量将长的switch语句转换为嵌套的switch语句

建议24:选择合理的case语句排序方法

建议24-1:尽量按照字母或数字顺序来排列各条case语句

建议24-2:尽量将情况正常的case语句排在最前面

建议24-3:尽量根据发生频率来排列各条case语句

建议25:尽量避免使用goto语句

建议26:区别continue与break语句

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200426A0M0QM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券