没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:本书《C 语言编程透视》涵盖了从编程风格的选择到代码质量优化的广泛话题。书中讨论了不同项目的C编程标准,并强调了统一代码风格的重要性,尤其是Linux的标准被推崇为一种优秀实践。此外,书籍还涉及了VIM编辑器的有效使用、GCC编译流程分析、程序执行过程中涉及的具体技术及其底层实现机制、可执行文件结构、缓冲区溢出等相关安全分析,以及代码的测试、调试技巧和多种优化方法等内容。 适合人群:具备一定的C语言或其它编程语言基础知识的学习者或从业者。 使用场景及目标:适合作为基础教程理解和掌握从编写规范、高效的C代码,再到高级调试技巧和性能优化等各个环节的知识与技能;帮助C语言开发人员提高编程质量和工作效率。 其他说明:作者通过大量的实例剖析和技术讲解揭示了很多看似平凡但却至关重要的技术细节,并倡导工程师不仅要学会编写代码更要学会理解背后的‘道’,使得C代码更加优雅有效的同时也为个人的职业发展奠定了坚实的基础。
资源推荐
资源详情
资源评论
《C 语言编程透视》系列分享专栏
简介
文章
也谈C语言编程风格:从程序员到工程师的蜕变
开源书籍:《C语言编程透视》
把 VIM 打造成源代码编辑器
GCC 编译背后的奥秘
程序执行的那一刹那
动态符号链接的细节
缓冲区溢出与注入分析
进程的内存映像
进程和进程的基本操作
为可执行文件“减肥”
代码测试、调试与优化小结
源码分析:静态分析 C 程序函数调用关系
源码分析:动态分析 C 程序函数调用关系
源码分析:动态分析 Linux 内核函数调用关系
Linux 段错误详解
也谈C语言编程风格:从程序员到工程师的蜕变
by falcon wuzhangjin@gmail.com of TinyLab.org
2014/08/17
前言
几个礼拜前,机械工业出版社有一朋友的学姐,在新西兰读书,发过来一段代码,希望就代码风格提供些修改建议。
学姐学姐
我把那个C函数的代码发你邮箱了,麻烦帮我提点修改建议,非常感谢!
看了下代码,本身是实现了一个算法,代码很漂亮,注释也到位,命名也符合“见文知意”。不知道有啥需要检查的。所以跟学姐确认了一下:
Falcon
不好意思,大概看了下好像是个算法实现,有啥需要帮忙check的么?
学姐学姐
帮我看看代码是否规范,变量的声明啥是否符合嵌入式的风格,谢谢 ;-P
Falcon
风格方面没有特定的统一规范哦,不同的项目或者公司要求有差异,比如Linux的驱动和代码由Documentation/CodingStyle规范,而所有GNU项目有他们自己的规范,其他项目类
似。而公司方面,比如华为公司有自己的风格。
如果是自己开发新项目,遵循其中某个约定就好,比如Linux的,如果是老项目,则可以考虑坚持老项目原有的规范,目标是让整个代码风格统一,方便阅读和维护。
上面基本是跟学姐交流的原文,下面我们就该问题展开深入讨论,希望为有类似困惑的同学提供一些参考。
编程风格的意义
深入讨论之前,首先要明确编程风格的意义所在,基本的有:
美观
方便阅读
易于理解
方便修改和维护
方便审查
方便测试
程序效率
代码质量
方便编写
总之,就是要平衡各个方面的需求,最终让产品团队高效、快乐地生产出高质量、高效的软件,并且要确保软件在整个生命周期内利于各个阶段的活动,包括前期编写、中期评
审、后期测试和长期维护。
所以编码本身其实也是一种艺术。
编程风格有哪些成文规范
就如同艺术流派的多样性一样,编码风格没有特定的统一规范,不同的软件项目或者企业有不同的艺术风格,这些风格成文后就变成了规范,例如:
Linux Documentation/CodingStyle
GNU Coding Standard
Uboot Coding Style
Busybox Style Guide
而公司方面,比如华为有自己的编程规范:《华为编程规范》,当然,不同的编程语言会有不同版本的规范。
具体(C语言开发)时应遵循哪个规范
那开发项目时,到底应该如何遵循规范呢?
根据自己在外企、民企和社区多年的项目开发经验,做个基本小结:
如果是全新的项目,推荐直接采用Linux规范
这里的全新,意味着是一个从头开发的项目。
Linux规范是笔者体验过的最“美”的风格,没有之一。当然,诸如《C Traps & Pitfalls》等提供了很好的补充,但是其他规范如果与Linux规范有冲突,请使用Linux规范。
要研究他,请重复阅读并持续实践:Documentation/CodingStyle,最好是创造些机会给社区贡献些代码。
记得善用(不是滥用)这些辅助工具:
scripts/Lindent
scripts/checkpatch.pl (更具实践性的不成文约定)
scripts/cleanpatch
scripts/cleanfile
如果公司没有制定规范,请不要重新发明轮子,即使有需要,也最多在这个之上加些补充。不要以公司创始人或者某些技术专家的喜好作为规范。
如果项目中用到第三方的库,建议这些部分保留它们自己的规范。
如果是社区项目
请遵循社区项目本身的规范,比如上面提到的Linux,GNU toolchain,Uboot, Busybox等,请用他们自己的规范。
即使GNU编码规范再“丑陋”,如果想往这个社区提交代码,为了保持整个项目的一致性,必须符合他们的规范,因为那是他们的地盘。
如果是老项目
这个“老”可能是公司历史遗留项目或者是供应商提供的源码,在维护已有的代码时,为了方便评审,请在修改代码时,千万不要尝试去修改已有代码的风格,并且在源代码基础上
新增的代码也需要遵循老代码的风格,有两个方面的关注:
保持最小粒度的文件内代码风格的一致性
让变更最小化,不要给评审带来额外的干扰,而且让Reviewer看到相对舒适的代码
当然,不排除老代码就是一坨翔,那么请按照这个步骤走,同样以Linux为例:
先备份老的代码,或者先直接提交老代码入库
用工具自动格式化,请用scripts/Lindent
然后解决自动格式化工具没有处理好的问题
之后用scripts/checkpatch.pl做一些检查
生成补丁,提交变更,发送评审
上面只是把老的代码入库了,并且确保了老代码是遵循规范的,之后再单独提交新的变更,并做相应评审。这个时候就不会把老代码风格的变更与新代码的变更搅合在一起,因
此会更方便评审,提高代码入库的效率。
后记
如果只是简单重复的Copy & Paste,那永远可能只是个程序员/Coder,在Coding的时候必须综合思考效率、质量、协作、体验、工程等因素,并能够很好地权衡,让各个因素
达成一个美的平衡,这样的Coder才会逐步成为真正意义上的工程师。
真正的工程师,可以在音乐、电影、写作、雕塑等之外,演绎另外一门IT的艺术,为人类创造更好体验的产品,这种产品在达成某种实用功能的基础上,能够为用户的各种感官
甚至精神上提供美的感受和体验,最终,这种产品不再是简单的堆砌,而是成为各方面协调一致的艺术品。
开源书籍:《C语言编程透视》
Hello-C-World:
背景
2007年开始系统地学习Shell编程,并在兰大开源社区写了序列文章。
在编写《Shell编程范例序列》文章的《进程操作》一章时,为了全面了解进程的来龙去脉,对程序开发过程的细节、ELF格式的分析、进程的内存映像等进行了全面地梳理,后
来搞得“雪球越滚越大”,甚至脱离了Shell编程关注的内容。所以想了个小办法,“大事化小,小事化了”,把涉及到的内容进行了分解,进而演化成另外一个完整的序列。
2008年3月1日,当初步完成整个序列时,做了如下的小结:
到今天,关于”Linux下C语言开发过程”的一个简单视图总算粗略地完成了,从寒假之前的一段时间到现在过了将近一个月左右吧。写这个主题的目的源自“Shell编程范例之进程操
作”,当写到这一章时,突然对进程的由来、本身和去向感到“迷惑不解”。所以想着好好花些时间来弄清楚它们,现在发现,这个由来就是这里的程序开发过程,进程来自一个普
通的文本文件,在这里是C语言程序,C语言程序经过编辑、预处理、编译、汇编、链接、执行而成为一个进程;而进程本身呢?当一个可执行文件被执行以后,有了exec调用,
被程序解释器映射到了内存中,有了它的内存映像;而进程的去向呢?通过不断地执行指令和内存映像的变化,进程完成着各项任务,等任务完成以后就可以退出了(exit)。
这样一份视图实际上是在寒假之前绘好的,可以从下图中看到它;不过到现在才明白背后的很多细节。这些细节就是这个序列的每个篇章,可以对照“视图”来阅读它们。
现状
目前整个序列大部分都已经以Blog的形式写完,大体结构目下:
《把VIM打造成源代码编辑器》
源代码编辑过程:用VIM编辑代码的一些技巧
更新时间:2008-2-22
《GCC编译的背后》
编译过程:预处理、编译、汇编、链接
第一部分:《预处理和编译》(更新时间:2008-2-22)
第二部分:《汇编和链接》(更新时间:2008-2-22)
《程序执行的那一刹那 》
执行过程:当从命令行输入一个命令之后
更新时间:2008-2-15
《进程的内存映像》
进程加载过程:程序在内存里是个什么样子?
剩余153页未读,继续阅读
资源评论
天涯学馆
- 粉丝: 1901
- 资源: 194
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 三相三电平维也纳整流器simulink仿真模型 1控制算法采用电压电流双闭环控制; 2外部电压环路为PI控制器; 3
- linuxlinuxlinuxlinuxlinux
- wt5.txt数据库课程设计
- wt4.txtC语言教学
- SAR ADC逐次逼近型ADC全流程设计 包括SAR ADC的理论分析,从基本的ADC结构到电路原理 包括SAR ADC的Ma
- 脉冲注入法,持续注入,启动低速运行过程中注入,电感法,ipd,力矩保持,无霍尔无感方案,媲美有霍尔效果 bldc控制器方案,无
- 模电数电数字电路,数字频率计,multisim 使用555 正弦波,方波,三角波都能测 提供multisim可以运行的原文件以及
- 三维路径规划 基于灰狼改进算法的机器人路径规划mp-GWO和CS-GWO机器人路径规划算法 自由切GWO,CS-GWO算法进行对
- 智能车仿真 代码使用参考教程:教程地址
- 考虑源荷储协同互动的主动配电网优化调度研究 关键词:分布式光伏 储能 主动配电网 优化调度 需求响应 仿真软件:matlab+y
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功