怎么阅读大型开源程序?

作者:Fatfat
链接:https://www.zhihu.com/question/267458926/answer/325680447
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

很牛的程序起点并不是各种奇淫技巧,git上那些大型程序庞杂的源代码,正确的做法要去翻它们年代久远如v0.1版本来读读,这些版本通常代码量不多,代码思路简洁,处理问题都很有针对性,这个阶段源代码特别适合了解设计者背后的初始理念,你通读下来会信心大增。

软件设计很少情况是开始就有能力写出完整软件架构的,大部分实际情况是选择从一个简陋迷你麻雀版框架开始搭建起来。
这个麻雀版框架某种意义上会决定了软件未来的走向,不断重构在里面扮演思考和打磨思想的整个历程。

你需要做的是整理出这个迷你的框架来,用到的关键知识不是语法,设计模式,库类这些,它们都是后面的细节功夫。
当前阶段你要关注的是迷你框架组织构成,它包含你现在能想到的模块的功能分类设计、各模块组合关系、切割实现的方式、自己顺手的第三方库有哪些、UI用什么库来实现、数据和实现两者如何进行区隔等等。
整个搭框架时候,就是反复的重复上述的几个步骤,慢慢细节化,直到麻雀版的功能可以正常跑起来。

后面写代码过程就比较明朗了,不会再去困惑和需要去不断猜测了,各种想法、需求和功能会推着你往前跑,范围性重构会成为常态。


如何阅读大型项目源码心得

05-11

以下是我个人方法的一些总结:rn关于如何阅读源码rn 个人觉得,规范的项目源码包中的头文件与命名方法都是比较规范的。一些重要函数的声明会在相关头文件中有说明,一般情况下,如果一个.c文件只包含一个头文件,那么这个头文件的命名应该是与.c名字相同。阅读开始前,首先展开一下相关的头文件,先查看相关.c文件用到了哪些函数申明,必要时记录这个函数,并注释说明。rn 函数的命名规则。规范的项目开发中,函数的命名一般都是以英文单词的缩写,如取每个单词的首字母,或一个单词中的几个字母,有的单词之间是以下划线“_”分隔开来的,记住这些英文单词的意思组合,可以有助于代码的阅读。rn2、下面是我利用VC6.0工具阅读源代码的方法:rn 打开VC,“文件”->“新建”->“工程”选择“Win32 Console Application”rnrn下一步就是导入所有的.c与.h文件了。rn选中FileView:rnrnrn右键Sourse File,选择Add File To directory:rnrn选中所以要添加的.c文件,确定,同样的操作完成Header File的导入:rnrn好了, 到此所有*.c.*.h文件已经导入到工程了。下面将我自己总结的如何查找函数的方法列出如下:rnrn假如我要寻找:ad.c中的这段代码中的函数定义和申明rnad_rec_t *ad_open_sps (int32 samples_per_sec)rnrn E_ERROR("A/D library not implemented\n");rn return NULL;rnrnrn这个.c文件中包含自定义的ad.h和err.h,err.h中一看就明白是一些错误信息提示函数的说明,所以我们可以去ad.h中寻找,右键点击ad.h,选择“open document "ad.h"”rnrnrn我们会发现在头文件中定义了许多宏,还有一些解释编译的语句,如#if...#elif... #endif这是方便平台移植,我们找到我们的平台#elif(linux)rnrnrn 在这里找到了我们所需要的结构体信息,在结构体中我们发现还有一个定义,int32,虽然一看就明白是32位的整形数字,但我们能不能再找到一些其它的数字类型定义呢?我们发现在ad.h这个头文件中还有一个头文件:"s2types.h",我们再去展开这个头文件,发现,这个头文件中定义了一些数据类型的声明:rnrnrn 通过以上由头文件找到相关函数的方法,我们可以想到,是否各.c文件是否可以通过各.c文件中包含的.h文件找到相关的联系呢?如果能把这层关系理清,那么代码的联系结构就清楚了。如果又能理解每个.c程序做了些什么事,那么项目整个流程就清楚了。当然要理解整个流程,相关背景、知识也是必不可少的。rn 在阅读的过程中发现,阅读一个项目的源码,是从整体往局部的结构来阅读,如一个人站在山顶往下看,要下山去的话,就得找一条路,而这条“路”就是程序的主方向,这样一来,那么目的不就明确了?

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试