C++代码阅读技巧.pptx_第1页
C++代码阅读技巧.pptx_第2页
C++代码阅读技巧.pptx_第3页
C++代码阅读技巧.pptx_第4页
C++代码阅读技巧.pptx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+代码阅读技巧,主讲人:张方雪,代码阅读的准备工作,需要准备的文档: 对于大的系统,需要系统的设计文档, 系统的测试文档, 整个系统的流程图(UML), 系统的使用说明等, 搜集所有可以帮助理解代码的文档来看. 对于小的程序的话, 不一定会有上面这些文档, 准备一下程序的帮助文档即可. 与代码的作者或是了解的代码的人进行充分的沟通, 这一点很重要,代码阅读的准备工作,IDE(Editor)准备, 代码分析工具准备: 使用你常用的IDE, ide的选择依爱好和平台而定, 很多时候IDE提供的代码分析能力能给程序员很大的帮助(比如VS的跳转到函数体, 跳回到上一个位置等.) 代码分析工具如, s

2、ource insight, Linux命令行下的grep命令等,如果使用得当的话, 会提高很大的效率, 需要在阅读代码之前熟悉这些工具的使用 代码格式乱怎么办? Astyle,代码阅读的准备工作,技术层面的准备也是很必要的 拿输入法内核代码举例, 输入法内核属于算法密集型的程序, 那么就要求阅读代码的人在算法方面有一定基础,程序中用到了Trie树, 二路归并算法等. 拿JUnit举例, 要深入地理解Junit的逻辑, 要了解单元测试的原理, 了解Java的底层机制, 设计模式等, 这些都输入技术层面的准备.,让程序运行起来!,备份代码 尝试运行代码, 在一开始, 可能出现各种不兼容的情况,(

3、比如VS2005平台开发的项目要在VS2008下面运行) 需要对代码进行各种修改, 这也是上一步备份代码的原因. 为什么要运行代码? 一段程序如果不能运行, 就不能透彻地理解程序的功能,即使不运行程序员一般也潜意识地用人脑模拟程序的运行过程, 但是限于人脑的运算能力, 肯定没有让计算机运行一下省时省力且有效.看一段不可运行的代码除了能学习一些技巧外, 没有太大的用途.而且代码可运行也有助于后面通过调试来帮助代码阅读.,让程序运行起来!,运行程序的时候需要参考一下程序的说明文档或是相应产品的使用说明, 不要按照自己猜想的去搞, 以免最终对程序的理解和实际情况大相径庭, 而且复杂的程序会有很繁复的

4、配置, 这一点更需要我们详读程序的说明文档和技术文档.,梳理程序的结构,大到一个复杂的服务器系统, 小道100行的console程序, 都有自己的程序结构 找到程序的入口, 比如控制台程序的main()函数, 而对于一个大的系统来说, 是要先确定这个系统的流程, 然后从系统的最开始的模块开始梳理逻辑 从入口开始, 找到主要被调用的各个过程, 总结出程序的总体运行流程, 画出流程图,梳理程序的结构,作出自己的流程图, 后面要在这个图的基础上来详细地理解各个模块的功能, 主键丰富这个流程图 分块标准, 如果对程序的各部分进行分块? 用来界定一个block, 函数调用可以分割的理由, 跟多的是基于自

5、己的理解来根据程序的功能来划分模块.,梳理程序的结构,总结如下: 循序渐进, 逐层次地阅读代码, 主体代码比较简单, 首先对主体有较好的掌握, 然后再细化到每个分支. 梳理代码流程的过程中, 要注意侧重宏观掌握, 不要纠结于对局部代码逻辑的理解.,关于注释,多加注释, 以免读到后面的代码又忘了前面代码的含义. 对于不明白的代码加上疑问性的注释, 日后回来审查的时候就会侧重性地读这段代码. 关注程序中原来的注释, 因为如果是一个好的系统的话, 程序员会有意识地在概念模糊或是易出错误的地方加上注释, 同时要删除没用的注释,关于注释,阅读代码的时候难免出现理解错误, 如果没有加详细的注释的话, 将很

6、难发现自己以前对程序的错误理解.,对于程序中某段代码的理解,分清系统函数和非系统函数, 对于系统函数只需要知道用法即可, 而非系统函数需要仔细看看函数实现. 对于不懂的代码, 需要反复地阅读, ”读书百遍, 其义自见”, 每次阅读要特别针对上次没有读懂的地方. 在自己不确定代码含义的地方尝试修改代码, 查看程序的运行结果, 然后校验自己的猜测.,对于程序中某段代码的理解,可以尝试从设计模式角度分析代码, 这样可以加深对程序功能的理解, 一个好的系统会有较多的设计模式存在, 理解其中的设计模式能更好地推断出作者的写作意图 每个程序员都有自己的编程风格, 阅读代码的同时, 有意识地总结作者的编程风

7、格, 对于理解程序也有帮助, 总结作者的命名习惯 Debug代码, 对程序添加log函数, 在程序运行玩之后查看log, 推断程序的运行情况, 断点调试也是很好的手段,对于程序中某段代码的理解,要勇于修改程序的代码, 程序中难免出现错误, 要大胆猜测, 能让程序从原来的错误中解脱出来. 要尝试重构代码, 当然要先基于正确理解的前提, 重构后的代码会更易于理解, 可以提高自己以后的工作效率. 修改自己正在阅读代码的过程其实就是”取其精华,去其糟粕”的后一句,对于代码的维护,有时候要阅读的代码是从别人那里接手过来的, 而终极目的就是要维护这段代码 维护代码需要做的事有, 给项目增加新的功能, 重构

8、代码, 修改代码的各种纰漏, 比如内存泄露. 关于内存泄露的问题, C/C+通过指针直接修改内存, 但是同时也带来了内存泄露的问题或是程序的崩溃, 比如 1, new之后没有执行相应的delete. 2, 程序发生了异常, 应该释放的资源没有释放, 对策就是在处理异常的时候关闭应该关闭的句柄, 释放应该释放的内存. 3, 使用COM指针, COM指针采用了引用计数, 在引用计数变成0的时候需要释放掉指针, 可以使用指针指针, 在构造/析构函数里面处理引用计数问题. 4, BSTR等COM相关的类型, 需要用户释放掉内存.,对于代码的维护,关于内存泄露和程序崩溃:5, new出来的数组调用了 delete xxx; 没有加. 类对象的一些类型转换同时也会造成非常隐蔽的内存泄露或是崩溃问题.6, 拷贝构造函数写得不好. 内存泄露的问题在大部分语言里面都有, 包括很多自动回收垃圾的语言, 比如Java等. 关于对程序的优化, 经验丰富的人可以尝试重构既有代码, 自建内存池来使用(C+的new效率比较低), 使用高效的程序库.,读什么代码,多读好的代码, 比如经典的开源项目的代

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论