永发信息网

如何学习别人的程序代码

答案:1  悬赏:0  手机版
解决时间 2021-02-14 04:15
如何学习别人的程序代码
最佳答案
如何学习别人的程序代码



 只要是个程序员就会看代码,但是很多人,包括我在内,在看一些开源代码的时候往往一头雾水,不知从何看起。
    越是结构好的代码,如果不理解它的思想越是难得看懂,例如Qt、Agg、CryptPP等。这里我将我的一些经验写在这里,留个记录吧。
    完善的开源工程都会有文档,即使没有文档也应当有api-guid,那么我们先找到它们,这时我们不要管它是怎么设计的,先编译一个,照着例子写个程序运行一下吧,再试试一些高级功能。这时我们在心中先猜猜它应当是怎样设计的(大多数情况是没有想法)。好吧,我们再来看文档,文档中一般有静态结构的说明,如模块划分、类列表、每个类的成员列表。嗯,还是一头雾水啊,没办法,我们打开源码所在的文件夹,看看源码的组织方式。嗯,有点头绪了,大多数情况下,目录结构与工程结构是一致的,而我们编写例子程序的时候使用的接口一般在源码的include目录下。那好吧,我们根据头文件名和目录结构去找相应的实现文件吧,但这往往相当困难,因为你会发现它根本就不是你所想的那样。一个类或一个外部变量,你想找到它往往会动用Windows的搜索。看了几个小时还没有太大的进展,仍然不知道它的头(高层的入口)在哪,尾(底层的具体实现)在哪,不过你至少对那些地方有哪些文件都熟悉了,那些零星的注释也被你看了一遍。这时该把你写的例子程序拿出来了,我们单步跟进去,跟的同时我们也注意一下所跟到的文件的物理位置、它附近都有哪些文件、哪些类或结构。一直跟下去,这样我们往往会顺藤摸瓜找到最底层的实现,并发现一条执行路径(太变态的或用了一堆模板的除外)。由于你已经对工程的结构有了一定了解,这时你可以从头和尾一起开始看代码(前提是你已经找到了一个头和一个尾),将一条线弄清楚,那么这个工程的其他线也应该是差不多的设计思路。
    有些开源工程里面的宏特别多,那你要当心,首先搞清楚这些宏吧。
    用C写的工程往往比用C++写的容易懂,因为它最多有很多函数指针和extern变量,而后者则令人头疼得多,如果你实在没有办法,那么上网搜吧,很多著名的开源工程一般会有一些人将其研究心得放到blog上,看一看,说不定一下豁然开朗。
    好吧,就写这么多,真是乱七八糟。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大足区刘建货箱厂这个地址在什么地方,我要处
网络游戏数据的加密方式 怎么加密的 有什么可
坚持的坚换偏旁在组词有什么字?
奴役西游记dlc通关存档怎么玩
罗山县信阳艾灵康艾灸生活馆地址是什么,有没
小巷餐吧(鼓楼店)这个地址在什么地方,我要处
qq关联 被关联的好友总是显示iphone 2g 在线
cx20雨刮片多少寸
夏利A+暖风水箱怎么换,
中国平安财产保险股份有限公司(肇州镇医院二
如何从网上学习双色球
【打点计时器测加速度】打点计时器测加速度公
郁金香有毒?
手机支付宝读取短信记录尝试被拒绝怎么更改
向华乡地址在什么地方,想过去办事
推荐资讯
excel表格怎么做月汇总啊
戽桶坡怎么去啊,有知道地址的么
今天迅雷会员登录不上去,怎么回事?网络正常
赵记云南过桥米线怎么去啊,有知道地址的么
下列有关孟德尔豌豆杂交试验的叙述不正确的是
怎么样处理邻里关系。
知道的说说飞利浦和欧普哪个好
曹植7岁做宰相的故事
汾西县第一中学校地址在哪,我要去那里办事
鄂州市鄂黄大桥交警大队三中队地址在哪,我要
生源百货(郴州苏仙)地址在什么地方,我要处理
三角形ABC的边长AD=14,BC=16,AC=26,P为角平分
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?