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

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

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

将C语言编程过程中可能遇到的疑问或者障碍进行一一列举与剖析。

内容简介

本书是一本关于C最佳实践的集大成之作,它从C语言本身、C程序的架构设计和思想、C程序的编码规范和习惯等三大方面对125个经典的问题给出了解决方案,为C开发者提高开发效率和编写高质量的C代码提供了宝贵的建议。对于每一个建议,作者不仅给出了被实践证明为比较优秀的解决方案,而且还给出了被误用或被错误理解的不好的解决方案,形成了鲜明对比。

作者简介

作者马伟,资深软件研发工程师、系统架构师和企业培训讲师,拥有多年软件研发和管理经验,在系统需求分析、架构设计、数据库设计与实现、设计模式、SOA、性能优化等方面有独到的见解。资深微软技术专家、微软特约讲师、西安。NET俱乐部技术主席,擅长C#、ASP。NET、VisualStudio、SQLServer、C/C++/、UML和Oracle等技术,曾荣获“最有影响力开发者”称号。参与并领导了“远程视频监控系统”、“视频营销平台”、“人事绩效考核系统”、“电力四分统计平台”、“电力理论线损计算软件”、“电力生产技术管理系统”、“电力红外监控系统”等项目的架构、设计与开发工作,实践经验丰富。

章节目录

版权信息

前言

第1章 数据,程序设计之根本

建议1:认识ANSI C

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

建议3:尽量少使用浮点类型

建议4:数据类型转换必须做范围检查

建议5:使用有严格定义的数据类型

建议6:使用typedef来定义类型的新别名

建议7:变量声明应该力求简洁

建议8:正确地选择变量的存储类型

建议9:尽量不要在可重入函数中使用静态(或全局)变量

建议10:尽量少使用全局变量

建议11:尽量使用const声明值不会改变的变量

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

建议12:尽量减少使用除法运算与求模运算

建议13:保证除法和求模运算不会导致除零错误

建议14:适当地使用位操作来提高计算效率

建议15:避免操作符混淆

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

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

建议17:if语句应该尽量保持简洁,减少嵌套的层数

建议18:谨慎0值比较

建议19:避免使用嵌套的“?:”

建议20:正确使用for循环

建议21:适当地使用并行代码来优化for循环

建议22:谨慎使用do/while与while循环

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

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

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

建议26:区别continue与break语句

第4章 函数同样需要保持简洁高效

建议27:理解函数声明

建议28:理解函数原型

建议29:尽量使函数的功能单一

建议30:避免把没有关联的语句放在一个函数中

建议31:函数的抽象级别应该在同一层次

建议32:尽可能为简单功能编写函数

建议33:避免多段代码重复做同一件事情

建议34:尽量避免编写不可重入函数

建议35:尽量避免设计多参数函数

建议36:没有返回值的函数应声明为void类型

建议37:确保函数体的“入口”与“出口”安全性

建议38:在调用函数时,必须对返回值进行判断,同时对错误的返回值还要有相应的错误处理

建议39:尽量减少函数本身或者函数间的递归调用

建议40:尽量使用inline内联函数来替代#define宏

第5章 不会使用指针的程序员是不合格的

建议41:理解指针变量的存储实质

建议42:指针变量必须初始化

建议43:区别“int*p=NULL”和“*p=NULL”

建议44:理解空(null)指针与NULL指针

建议45:谨慎使用void指针

建议46:避免使用指针的长度确定它所指向类型的长度

建议47:避免把指针转换为对齐要求更严格的指针类型

建议48:避免将一种类型的操作符应用于另一种不兼容的类型

建议49:谨慎指针与整数之间的转换

建议50:区别“const int*p”与“int*const p”

建议51:深入理解函数参数的传递方式

第6章 数组并非指针

建议52:理解数组的存储实质

建议53:避免数组越界

建议54:数组并非指针

建议55:理解数组与指针的可交换性

建议56:禁止将一个指向非数组对象的指针加上或减去一个整数

建议57:禁止对两个并不指向同一个数组的指针进行相减或比较

建议58:若结果值并不引用合法的数组元素,不要将指针加上或减去一个整数

建议59:细说缓冲区溢出

建议60:区别指针数组和数组指针

建议61:深入理解数组参数

第7章 结构、位域和枚举

建议62:结构体的设计要遵循简单、单一原则

建议63:合理利用结构体内存对齐原理来提高程序效率

建议64:结构体的长度不一定等于各个成员的长度之和

建议65:避免在结构体之间执行逐字节比较

建议66:谨慎使用位域

建议67:谨慎使用枚举

建议68:禁止在位域成员上调用offsetof宏

建议69:深入理解结构体数组和结构体指针

第8章 字符与字符串

建议70:不要忽视字符串的null('\0')结尾符

建议71:尽量使用const指针来引用字符串常量

建议72:区别strlen函数与sizeof运算符

建议73:在使用不受限制的字符串函数时,必须保证结果字符串不会溢出内存

建议74:谨慎strtok函数的不可重入性

建议75:掌握字符串查找技术

第9章 文件系统

建议76:谨慎使用printf和scanf函数

建议77:谨慎文件打开操作

建议78:文件操作完成后必须关闭

建议79:正确理解EOF宏

建议80:尽量使用feof和ferror检测文件结束和错误

建议81:尽量使用fgets替换gets函数

建议82:尽量使用fputs替换puts函数

建议83:合理选择单个字符读写函数

建议84:区别格式化读写函数

建议85:尽量使用fread与fwrite函数来读写二进制文件

建议86:尽量使用fseek替换rewind函数

建议87:尽量使用setvbuf替换setbuf函数

建议88:谨慎remove函数删除已打开的文件

建议89:谨慎rename函数重命名已经存在的文件

第10章 预处理器

建议90:谨慎宏定义

建议91:合理地选择函数与宏

建议92:尽量使用内联函数代替宏

建议93:掌握预定义宏

建议94:谨慎使用“#include”

建议95:掌握条件编译指令

建议96:尽量避免在一个函数块中单独使用“#define”或“#undef”

第11章 断言与异常处理

建议97:谨慎使用断言

建议98:谨慎使用errno

建议99:谨慎使用函数的返回值来标志函数是否执行成功

建议100:尽量避免使用goto进行出错跳转

建议101:尽量避免使用setjmp与longjmp组合

第12章 内存管理

建议102:浅谈程序的内存结构

建议103:浅谈堆和栈

建议104:避免错误分配内存

建议105:确保安全释放内存

建议106:避免内存越界

建议107:避免内存泄漏

建议108:避免calloc参数相乘的值超过size_t表示的范围

第13章 信号处理

建议109:理解信号

建议110:尽量使用sigaction替代signal

建议111:避免在信号处理函数内部访问或修改共享对象

建议112:避免以递归方式调用raise函数

第14章 了解C11标准

建议113:谨慎使用_Generic

建议114:尽量使用gets_s替换gets函数

建议115:尽量使用带边界检查的字符串操作函数

建议116:了解C11多线程编程

建议117:使用静态断言_Static_assert执行编译时检查

建议118:使用_Noreturn标识不返回值的函数

第15章 保持良好的设计

建议119:避免错误地变量初始化

建议120:谨慎使用内联函数

建议121:避免在函数内定义占用内存很大的局部变量

建议122:谨慎设计函数参数的顺序和个数

建议123:谨慎使用标准函数库

建议124:避免不必要的函数调用

建议125:谨慎程序中嵌入汇编代码

编写高质量代码:改善C程序代码的125个建议是2016年由机械工业出版社华章分社出版,作者马伟。

得书感谢您对《编写高质量代码:改善C程序代码的125个建议》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
数学的故事 电子书
数学家们给你解答有趣的数学问题,带你走进数学的奇妙世界。
电的故事 电子书
本书的主角是“电老虎”——一个能力强大、脾气暴躁、非常不好控制的“猛兽”!本书从古人对摩擦生电的认识说起,以在历史上曾经产生过重大影响的科学家(如富兰克林、爱因斯坦、戴维、贝尔、爱迪生、法拉第、麦克斯韦、赫兹、库珀等)及其重要的发明贡献为脉络,结合他们的生平,讲述人类认识电和利用电的有趣历史。比如,人类是怎样从摩擦生电现象中发现电的存在的,电鳗可令其他动物丧命的神秘力量到底是什么,富兰克林是如何用
科学的曙光 电子书
知名理论物理学和宇宙学家塔努·帕德马纳班力作,一部写给普通大众的简明科学史。
神奇的甲虫 电子书
飘逸的触角、超长的“脖子”、全身带刺、浑身是毛……279种形态各异的昆虫,令人大开眼界。
进化中的宇宙 电子书
本书探讨了宇宙进化的问题,对宇宙的第一代到第三代的进化历程进行总结与回顾,对当前宇宙的第四代进行剖析,对未来宇宙的第五代进行了预测,还就达尔文进化论的理论本身及其对人类社会的负面影响做出反思,对宇宙进化所引发的人类宇宙观、哲学观、人生观、真善美观、终极关怀观等的大变革进行讨论。