c++阅读源代码方法_仙人球的绿眼泪的博客-程序员宅基地

技术标签: C++  c++  阅读  源代码  

转自:http://blog.163.com/fan_jiangfeng/blog/static/98698782201185822872/



1.阅读源代码对于程序员来说是提高技术实力和业务知识最好的方法,那么我们怎样阅读源代码就是我们 首先要解决的问题。

阅读源代码就像管理一家大的公司,关键在于管理者卓越的领导意识。作为阅读源代码的人也应该有良好的意识,在阅读源代码时才能事半功倍。养成良好的阅读习惯。

阅读方法如下:

<!--[if !supportLists]--> 1.<!--[endif]-->对于一个大的项目,首先要弄清项目的框架结构和各个项目模块的功能(输入什么,处理以后输出什么). 在这一点上Ant工具做的相当到位,通过编写build.xml和xml的良好的语法结构可以清楚的看到框架。Make工具也做比较出色。具体细节可参考GNU Make /Apache Ant Manual.和程序的build.xml或makefile文件。

2. 参照源代码和对应文档及业务知识 掌握各个项目模块的主流程也就是先从每个模块的main函 数开始,按照顺序列出所用的函数,试着画流程图。注意:对于列出的函数我们现在只关心输入什么,处理后输出什么即函数的功能,不关心函数的实现,用UltraEdit32最新版阅读时十分方便。

3.以上两步熟悉以后,在进一步熟悉各个项目模块的主流程,要弄清各个自定义函数的具体实现(标准库函数除外 原因:由厂商提供,厂商只提供函数的功能)。

4.在每一步都要做好源代码阅读笔记,总结方法和技巧。每个项目的源代码阅读要多读几遍,书读百遍 其义之见 呵呵 定期与同仁切磋交流。

5.提出更好的解决方案,(按照软件工程的设计步骤)评估方案的性能(界面,易用性,内存等方面).

6.每日构建 具体参考构建工具和相关文挡。

2**********************************************************************************
接着,看一看大师是如何做的。一般,要初步了解人家的框架模型,(这可以通过追踪一些核心函数/类得到一些印象,或者开发文档等);进一步,找到核心数据结构,核心数据结构会直接影响代码的质量。(曾经有人说:我不要看你的程序,让我看一看你的数据结构!)事实上,当你完全读懂它的数据结构时,在来阅读源代码,就是水到渠成的事了。


3**********************************************************************************
1、阅读源代码的说明文档,比如README, 作者写的非常的详细,仔细读过之后,在阅读程序的时候往往能够从README文件中找到相应的说明,从而简化了源程序的阅读工作。
2、如果源代码有文档目录,一般为doc或者docs, 最好也在阅读源程序之前仔细阅读,因为这些文档同样起了很好的说明注释作用。
3、从makefile文件入手,分析源代码的层次结构,找出哪个是主程序,哪些是函数包。这对于快速把握程序结构有很大帮助。
4、从main函数入手,一步一步往下阅读,遇到可以猜测出意思来的简单的函数,可以跳过。但是一定要注意程序中使用的全局变量(如果是C程序),可以把关键的数据结构说明拷贝到一个文本编辑器中以便随时查找。
5、分析函数包(针对C程序),要注意哪些是全局函数,哪些是内部使用的函数,注意extern关键字。对于变量,也需要同样注意。先分析清楚内部函数,再来分析外部函数,因为内部函数肯定是在外部函数中被调用的。
6、需要说明的是数据结构的重要性:对于一个C程序来说,所有的函数都是在操作同一些数据,而由于没有较好的封装性,这些数据可能出现在程序的任何地方,被任何函数修改,所以一定要注意这些数据的定义和意义,也要注意是哪些函数在对它们进行操作,做了哪些改变。
7、在阅读程序的同时,最好能够把程序存入到cvs之类的版本控制器中去,在需要的时候可以对源代码做一些修改试验,因为动手修改是比仅仅是阅读要好得多的读程序的方法。在你修改运行程序的时候,可以从cvs中把原来的代码调出来与你改动的部分进行比较(diff命令), 可以看出一些源代码的优缺点并且能够实际的练习自己的编程技术。
8、阅读程序的同时,要注意一些小工具的使用,能够提高速度,比如vi中的查找功能,模式匹配查找,做标记,还有grep,find这两个最强大最常用的文本搜索工具的使用。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012736279/article/details/47253077

智能推荐

java 正则表达式获取指定两个字符串之间内容_java正则表达式获取某两个字符串中间的所有内容-程序员宅基地

xml解析利用正则表达式获取指定两个字符串之间内容 在遇到解析复杂xml的时候,想到大家所想到的都是利用dom4j作为首发工具,但是当遇到层次很多,较为复杂,我们难道还需要从根节点一层一层的解析下去吗?此时不仅代码繁琐,而且准确率还不是那么高,采用此种方式,可以获取指定两种字符串之间的任意xml文本。package com.starit.ana_java正则表达式获取某两个字符串中间的所有内容

TeXstudio ! LaTeX Error: Unknown graphics extension: .eps.解决办法-程序员宅基地

最近在用TeXstudio写论文,一般情况下,与latex最符合的图片格式是eps,但是这次编译的时候系统提示无法识别这个格式,但是很是郁闷,在网上查找了答案,很多人说只要把eps格式的图片保存成pdf格式就可以了,自己试了一下,还真可以,但是论文的编委会不买账,说必须要用eps的格式,顿时头大。 在近一个小时的摸索下,终于找到了答案。 pdflatex是不能编译eps格式的图片的,需要把...

第三方支付兼并出海浪潮 | 发展趋势篇-程序员宅基地

本篇文章给大家介绍第三方支付行业发展趋势。第三方支付行业发展趋势我国第三方支付行业加快增长,从2013年起,第三方支付市场的交易规模平均以50%的年均增速增长。2017年,我国第三方支付行业总交易规模达100万亿元。保守估计,2..._第三方支付的浪潮

Arduino ST7789 240*240 1.3寸 TFT —— 飞升之高效率显示驱动篇_gfx library for arduino_哈皮玩的博客-程序员宅基地

昨天的屏幕到了,也用之前“发现的”Arduino-ST7789-Library“专用驱动库”进行了点亮操作,但总是感觉屏幕显示的效率差强人意。因为在做TFT屏幕选型的时候有了解Arduino生态下各种屏幕的驱动支持情况,发现一个感觉像“大神”一样的库:GFX Library For Arduino。我买的屏幕是ST7789驱动,想着用专用的,应该不会错,就先有了上一篇的介绍,看这里。Sometimes, 专用的不完全合适。我们来看下对比:惊掉下巴 —— GFX For Arduino吊打,8倍效率提升._gfx library for arduino

NEFU OJ26 计算阶乘位数-程序员宅基地

#include #include #includeusing namespace std;int digit(int n){ double d = 0; for(int i =1;i<=n;++i) { d += log10((double)i); } return (int)(d+1);}int main() { int m

随便推点

游戏开发-程序员宅基地

1.设置全屏以及绘画简单的图形2.剖析游戏开发用view还是surfaceView ?!3.剖析 SurfaceView ! Callback以及SurfaceHolder!!4.Android 游戏框架(一个游戏角色在屏幕行走的demo)5.游戏注册界面Demo-实现两个Activity之间的切换与数据交互!6.在SurfaceView中添加组件!!!!并且相互交互数据!!!

[SP104 HIGH]Highways [HEOI2015]小Z的房间——矩阵树定理入门-程序员宅基地

矩阵树定理:用于计算无向连通图的生成树个数。计算出整张图的度数矩阵D(即Di,iD_{i,i}Di,i​表示i的度数),和邻接矩阵A(即Ai,jA_{i,j}Ai,j​表示i和j的连边的数量),然后得到基尔霍夫矩阵(D-A),计算新矩阵的任意n-1阶主子式的绝对值即可。计算行列式的值:行列式的值直接计算复杂度太高,于是我们利用类似于高斯消元的方法将行列式消成一个上三角矩阵,不难得出此时除了...

docker安装mysql并且远程链接_docker安装mariadb配置远程连接-程序员宅基地

拉取镜像docker pull mariadb创建容器docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql访问密码 -d mariadb进入容器docker exec -it mariadb /bin/bash登陆并且进入mysql库mysql -u root -puse mysql查看访问权限#Host列: 代表谁可以访问#User列: 哪个用户可以访问#如果有%|root._docker安装mariadb配置远程连接

电子电路复习之零点漂移现象_零点漂移电流-程序员宅基地

零点漂移现象(温漂):元件参数的变化、老化、电源电压波动、温度变化等等因素都会引起输出电压的变化,在阻容耦合电路中,漂移电压都会降落在耦合电容上,而在直接耦合的放大电路中,漂移电压则会传递到下一级进一步放大,逐级放大,即使输入端短路,也会出现变化缓慢的输出电压。解决方法:在电路中引入直流负反馈,Re。产生温漂时电流的变化会引起Re上电压的变化,从而起到减小温漂的作用,但是并不能绝对消除。温度补偿,..._零点漂移电流

JDBC 中 execute、executeQuery、executeUpdate的区别_沃吐啦的博客-程序员宅基地

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。1>方法executeQuery用于产生单个结果集(ResultSet)的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。如://加载数据库.

css3实现流星以及星星闪烁效果_css3 星星点点-程序员宅基地

<div id="Vue"> <div class="shine shine2"></div> <div class="star"></div> <div class="star pink"></div> <div class="star blue"></div> </div>* { margin: 0px; padding: 0p.._css3 星星点点