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

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

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

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

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

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

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

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

  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/Dautt/p/3178385.html
Copyright © 2011-2022 走看看