- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C代录半阅读技巧
C++代码阅读技巧
主讲人:张方雪
代码阅读的准备工作
需要准备的文档:
对于大的系统,需要系统的设计文档, 系统的测试文档, 整个系统的流程图(UML), 系统的使用说明等, 搜集所有可以帮助理解代码的文档来看.
对于小的程序的话, 不一定会有上面这些文档, 准备一下程序的帮助文档即可.
与代码的作者或是了解的代码的人进行充分的沟通, 这一点很重要
代码阅读的准备工作
IDE(Editor)准备, 代码分析工具准备:
使用你常用的IDE, ide的选择依爱好和平台而定, 很多时候IDE提供的代码分析能力能给程序员很大的帮助(比如VS的跳转到函数体, 跳回到上一个位置等.)
代码分析工具如, source insight, Linux命令行下的grep命令等,如果使用得当的话, 会提高很大的效率, 需要在阅读代码之前熟悉这些工具的使用
代码格式乱怎么办? Astyle~
代码阅读的准备工作
技术层面的准备也是很必要的
拿输入法内核代码举例, 输入法内核属于算法密集型的程序, 那么就要求阅读代码的人在算法方面有一定基础,程序中用到了Trie树, 二路归并算法等.
拿JUnit举例, 要深入地理解Junit的逻辑, 要了解单元测试的原理, 了解Java的底层机制, 设计模式等, 这些都输入技术层面的准备.
让程序运行起来!
备份代码
尝试运行代码, 在一开始, 可能出现各种不兼容的情况,(比如VS2005平台开发的项目要在VS2008下面运行) 需要对代码进行各种修改, 这也是上一步备份代码的原因.
为什么要运行代码? 一段程序如果不能运行, 就不能透彻地理解程序的功能,即使不运行程序员一般也潜意识地用人脑模拟程序的运行过程, 但是限于人脑的运算能力, 肯定没有让计算机运行一下省时省力且有效.看一段不可运行的代码除了能学习一些技巧外, 没有太大的用途.而且代码可运行也有助于后面通过调试来帮助代码阅读.
让程序运行起来!
运行程序的时候需要参考一下程序的说明文档或是相应产品的使用说明, 不要按照自己猜想的去搞, 以免最终对程序的理解和实际情况大相径庭, 而且复杂的程序会有很繁复的配置, 这一点更需要我们详读程序的说明文档和技术文档.
梳理程序的结构
大到一个复杂的服务器系统, 小道100行的console程序, 都有自己的程序结构
找到程序的入口, 比如控制台程序的main()函数, 而对于一个大的系统来说, 是要先确定这个系统的流程, 然后从系统的最开始的模块开始梳理逻辑
从入口开始, 找到主要被调用的各个过程, 总结出程序的总体运行流程, 画出流程图
梳理程序的结构
作出自己的流程图, 后面要在这个图的基础上来详细地理解各个模块的功能, 主键丰富这个流程图
分块标准, 如果对程序的各部分进行分块? {}用来界定一个block, 函数调用可以分割的理由, 跟多的是基于自己的理解来根据程序的功能来划分模块.
梳理程序的结构
总结如下: 循序渐进, 逐层次地阅读代码, 主体代码比较简单, 首先对主体有较好的掌握, 然后再细化到每个分支.
梳理代码流程的过程中, 要注意侧重宏观掌握, 不要纠结于对局部代码逻辑的理解.
关于注释
多加注释, 以免读到后面的代码又忘了前面代码的含义.
对于不明白的代码加上疑问性的注释, 日后回来审查的时候就会侧重性地读这段代码.
关注程序中原来的注释, 因为如果是一个好的系统的话, 程序员会有意识地在概念模糊或是易出错误的地方加上注释, 同时要删除没用的注释
关于注释
阅读代码的时候难免出现理解错误, 如果没有加详细的注释的话, 将很难发现自己以前对程序的错误理解.
对于程序中某段代码的理解
分清系统函数和非系统函数, 对于系统函数只需要知道用法即可, 而非系统函数需要仔细看看函数实现.
对于不懂的代码, 需要反复地阅读, ”读书百遍, 其义自见”, 每次阅读要特别针对上次没有读懂的地方.
在自己不确定代码含义的地方尝试修改代码, 查看程序的运行结果, 然后校验自己的猜测.
对于程序中某段代码的理解
可以尝试从设计模式角度分析代码, 这样可以加深对程序功能的理解, 一个好的系统会有较多的设计模式存在, 理解其中的设计模式能更好地推断出作者的写作意图
每个程序员都有自己的编程风格, 阅读代码的同时, 有意识地总结作者的编程风格, 对于理解程序也有帮助, 总结作者的命名习惯
Debug代码, 对程序添加log函数, 在程序运行玩之后查看log, 推断程序的运行情况, 断点调试也是很好的手段
对于程序中某段代码的理解
要勇于修改程序的代码, 程序中难免出现错误, 要大胆猜测, 能让程序从原来的错误中解脱出来.
要尝试重构代码, 当然要先基于正确理解的前提, 重构后的代码会更易于理解, 可以提高自己
文档评论(0)