瑞客论坛

 找回密码
 立即注册
查看: 1397|回复: 15

编写高质量代码:改善C程序代码的125个建议

[复制链接]

金币1758  第996名

3

主题

413

回帖

4934

积分

论坛元老

Rank: 8Rank: 8

威望
1580
贡献
1596
热心值
0
金币
1758
注册时间
2022-6-29
发表于 2022-9-13 15:58 | 显示全部楼层 |阅读模式
编写高质量代码:改善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 循环
  • 游客,本付费内容需要支付 10金币 才能浏览, 赞助VIP全站免费下载支付


回复

使用道具 举报

金币96  第11133名

1

主题

602

回帖

3095

积分

论坛元老

Rank: 8Rank: 8

威望
1705
贡献
1294
热心值
0
金币
96
注册时间
2020-12-11
发表于 2022-9-13 23:13 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币29  第14768名

0

主题

1167

回帖

5845

积分

论坛元老

Rank: 8Rank: 8

威望
2872
贡献
2944
热心值
0
金币
29
注册时间
2020-8-11
发表于 2022-9-14 06:31 | 显示全部楼层
Sample下载的注意了
回复

使用道具 举报

金币2825  第610名

3

主题

958

回帖

1万

积分

永久会员

Rank: 8Rank: 8

威望
4547
贡献
4229
热心值
0
金币
2825
注册时间
2022-6-29
QQ
发表于 2022-9-14 08:23 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币1317  第1334名

1

主题

2057

回帖

8583

积分

论坛元老

Rank: 8Rank: 8

威望
4292
贡献
2974
热心值
0
金币
1317
注册时间
2022-3-31
发表于 2022-9-14 08:50 | 显示全部楼层
激动人心,无法言表!
回复

使用道具 举报

金币4712  第298名

0

主题

4116

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
6853
贡献
4593
热心值
0
金币
4712
注册时间
2022-1-19
发表于 2022-9-14 09:39 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币98  第10901名

2

主题

3327

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
7002
贡献
4519
热心值
0
金币
98
注册时间
2021-12-10
发表于 2022-9-14 10:43 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币216  第5460名

0

主题

2322

回帖

9325

积分

论坛元老

Rank: 8Rank: 8

威望
5419
贡献
3690
热心值
0
金币
216
注册时间
2021-9-23
发表于 2022-9-14 10:44 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币2396  第727名

7

主题

2060

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
5725
贡献
3916
热心值
0
金币
2396
注册时间
2021-8-23
发表于 2022-9-14 11:36 | 显示全部楼层
666
回复

使用道具 举报

金币1064  第1618名

1

主题

1686

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
9813
贡献
5984
热心值
1
金币
1064
注册时间
2020-5-6
发表于 2022-9-14 13:57 | 显示全部楼层
好像不全,才145页
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|瑞客论坛 |网站地图

GMT+8, 2024-12-29 09:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表