zoukankan      html  css  js  c++  java
  • 如何学习别人的代码(转)

    程序员的开始阶段就是阅读别人的代码,这是起步阶段。

    以下是转载的,先收藏者,以后有心得就补上。

    只要是个程序员就会看代码,但是很多人,包括我在内,在看一些开源代码的时候往往一头雾水,不知从何看起。

        越是结构好的代码,如果不理解它的思想越是难得看懂,例如Qt、Agg、CryptPP等。这里我将我的一些经验写在这里,留个记录吧。

        完善的开源工程都会有文档,即使没有文档也应当有api-guid,那么我们先找到它们,这时我们不要管它是怎么设计的,先编译一个,照着例子写个程序运行一下吧,再试试一些高级功能。这时我们在心中先猜猜它应当是怎样设计的(大多数情况是没有想法)。好吧,我们再来看文档,文档中一般有静态结构的说明,如模块划分、类列表、每个类的成员列表。嗯,还是一头雾水啊,没办法,我们打开源码所在的文件夹,看看源码的组织方式。嗯,有点头绪了,大多数情况下,目录结构与工程结构是一致的,而我们编写例子程序的时候使用的接口一般在源码的include目录下。那好吧,我们根据头文件名和目录结构去找相应的实现文件吧,但这往往相当困难,因为你会发现它根本就不是你所想的那样。一个类或一个外部变量,你想找到它往往会动用Windows的搜索。看了几个小时还没有太大的进展,仍然不知道它的头(高层的入口)在哪,尾(底层的具体实现)在哪,不过你至少对那些地方有哪些文件都熟悉了,那些零星的注释也被你看了一遍。这时该把你写的例子程序拿出来了,我们单步跟进去,跟的同时我们也注意一下所跟到的文件的物理位置、它附近都有哪些文件、哪些类或结构。一直跟下去,这样我们往往会顺藤摸瓜找到最底层的实现,并发现一条执行路径(太变态的或用了一堆模板的除外)。由于你已经对工程的结构有了一定了解,这时你可以从头和尾一起开始看代码(前提是你已经找到了一个头和一个尾),将一条线弄清楚,那么这个工程的其他线也应该是差不多的设计思路。

        有些开源工程里面的宏特别多,那你要当心,首先搞清楚这些宏吧。

        用C写的工程往往比用C++写的容易懂,因为它最多有很多函数指针和extern变量,而后者则令人头疼得多,如果你实在没有办法,那么上网搜吧,很多著名的开源工程一般会有一些人将其研究心得放到blog上,看一看,说不定一下豁然开朗。

  • 相关阅读:
    用C++发邮件
    python打包程序py2exe实战
    分享:Python: 数据分析资源
    Socket传输文件时进行校验(简单解决TCP粘包问题)
    第二回 基类的架造方法应该为子类想的多一些
    第一回 要想知道为什么抽象出基类,应该先对基类有一个比较明确的认识
    树型结构~无限级联下拉列表框
    为什么我要将数据库上下文进行抽象,为它生产一个基类有用吗~目录
    将不确定变为确定~真的是SqlDataReader引起的超时?
    张学友 《她来听我的演唱会》
  • 原文地址:https://www.cnblogs.com/Dautt/p/3178385.html
Copyright © 2011-2022 走看看