怎么阅读大型项目源码心得
发布时间:2010-06-14 17:33:06 文章来源:www.iduyao.cn 采编人员:星星草
如何阅读大型项目源码心得
以下是我个人方法的一些总结:
关于如何阅读源码
个人觉得,规范的项目源码包中的头文件与命名方法都是比较规范的。一些重要函数的声明会在相关头文件中有说明,一般情况下,如果一个.c文件只包含一个头文件,那么这个头文件的命名应该是与.c名字相同。阅读开始前,首先展开一下相关的头文件,先查看相关.c文件用到了哪些函数申明,必要时记录这个函数,并注释说明。
函数的命名规则。规范的项目开发中,函数的命名一般都是以英文单词的缩写,如取每个单词的首字母,或一个单词中的几个字母,有的单词之间是以下划线“_”分隔开来的,记住这些英文单词的意思组合,可以有助于代码的阅读。
2、下面是我利用VC6.0工具阅读源代码的方法:
打开VC,“文件”->“新建”->“工程”选择“Win32 Console Application”
下一步就是导入所有的.c与.h文件了。
选中FileView:
右键Sourse File,选择Add File To directory:
选中所以要添加的.c文件,确定,同样的操作完成Header File的导入:
好了, 到此所有*.c.*.h文件已经导入到工程了。下面将我自己总结的如何查找函数的方法列出如下:
假如我要寻找:ad.c中的这段代码中的函数定义和申明
ad_rec_t *ad_open_sps (int32 samples_per_sec)
{
E_ERROR("A/D library not implemented\n");
return NULL;
}
这个.c文件中包含自定义的ad.h和err.h,err.h中一看就明白是一些错误信息提示函数的说明,所以我们可以去ad.h中寻找,右键点击ad.h,选择“open document "ad.h"”
我们会发现在头文件中定义了许多宏,还有一些解释编译的语句,如#if...#elif... #endif这是方便平台移植,我们找到我们的平台#elif(linux)
在这里找到了我们所需要的结构体信息,在结构体中我们发现还有一个定义,int32,虽然一看就明白是32位的整形数字,但我们能不能再找到一些其它的数字类型定义呢?我们发现在ad.h这个头文件中还有一个头文件:"s2types.h",我们再去展开这个头文件,发现,这个头文件中定义了一些数据类型的声明:
通过以上由头文件找到相关函数的方法,我们可以想到,是否各.c文件是否可以通过各.c文件中包含的.h文件找到相关的联系呢?如果能把这层关系理清,那么代码的联系结构就清楚了。如果又能理解每个.c程序做了些什么事,那么项目整个流程就清楚了。当然要理解整个流程,相关背景、知识也是必不可少的。
在阅读的过程中发现,阅读一个项目的源码,是从整体往局部的结构来阅读,如一个人站在山顶往下看,要下山去的话,就得找一条路,而这条“路”就是程序的主方向,这样一来,那么目的不就明确了?
------解决方案--------------------
看Linux源码,我一直用source insight!
强大!
------解决方案--------------------
我还是习惯用SOURCE INSIGHT3.0 功能很齐全 用时间长了别的都不习惯
------解决方案--------------------
window 用 SOURCE INSIGHT
linux 用 kscope 看
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
在驱动开发中出现 'struct' type redefinition 应该怎么办?? 大神们告诉小弟一下...
下面是我写的代码:
#pragma once
//**********...
-
大神们帮我看一下,我的代码错在什么地方? 加载成功,卸载就蓝屏了....
/*
*******************************************************...
-
sigma8653很罕见的问题
SOS!
sigma8653板子插上卡,上电后可以识别SD卡,然后软重启(reboot)就无法识别了!
奇怪的时,继续软重启一次又可...
-
Cancel自旋锁 起了什么作用?
发现IoCancelIrp 函数中
获取了Cancel自旋锁
设置了Irp->Cancel
调用了OnCancelIo函数
但是进入了On...
-
windows下 pnp设备的即插即用功能是怎么实现的?
看到 windows内核情景分析里说
加载驱动有三种方式 前两种是静态 分别是引导...
-
取消当前 IRP 执行的过程是怎样的?
#pragma code_seg("PAGE")
NTSTATUS MyWdmRead(PDEVICE_OBJECT DeviceObject,PIRP Irp)
{
...
-
vs2008中,link2001错误的问题,代码如下
vs2008中,link2001错误的问题,代码如下
#include <ntddk.h>
VOID OnUnload(IN PDRIVER_OBJ...
-
什么是内核缓冲区,用户缓冲区
比如网卡的内核缓冲区,那这个缓冲区是在pc内存还是在网卡的芯片上呢?
------解决方案---------------...
-
如果在一个函数中有提升IRQL的语句 是不是整个函数都不能放在分页内存中 ?
如果我在一个函数前使用了 #pragma code_seg("PAGE") ...
-
请教Linux下dm9000网卡驱动程序问题
应用程序网络编程是基于socket接口的,好像完全屏蔽了底层,不能像字符设备那样应用程序可以调用...