Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49362
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 176
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-27 21:19
个人简介

if you want to do,just do it !

文章分类

全部博文(8)

分类: C/C++

2013-07-16 15:31:22

    声明:本人现为一初学者,一下博文纯属个人看法,如有不足之处或者读者另有高见,还烦请给予指出或者建议,博主在此感激不尽!

       前段时间由于考试原因,C语言的学习被安排的杂乱无章,导致后面学习效率大大降低,恰巧这几天放假了,赶紧把之前的一些学习体会和经验总结下来,以免以后再次碰到类似问题。
       好了,废话不多说,进入正题。
       我相信,很多刚接触编程语言的同学可能会跟我有一样的问题:拿到一本语言类的书籍,上面每个章节都在讲述有关该语言的语法,语句等等知识,简单的知识可能举个小例子也就能看懂了。但是还有一些没有办法靠简单例子来解释的,比如C语言的单链表,它本身是一种数据结构,要是不把它的创建,查询,增加,删除等等都写出来,就无法真正理解它的原理和本质,单一的举一点点或一方面来讲是行不通的,所以我们的课本把所有代码都打印下来了。有了代码以后呢?就可以看懂了么?作为一个初学者,我当初在学习这部分内容的时候,就曾经百思不得其解,那么一大堆代码,我该怎样把它吃透?
       今天我们就来讨论一下,如何把一堆看起来很复杂的东西慢慢消化理解。鉴于最近在看《LinuxC编程实战》,就拿上面的“ls的实现”为例吧!
       首先,拿到一堆代码后,我们必须要有一种“框架”的概念,即这个程序的结构是怎样的,它分为哪些功能模块,每个函数各完成什么功能,等等。这种思想必须贯穿整个过程,这在我过去的学习中略有体会,最近跟一位学长讨论之后更加坚信了这一点!
       比如,“ls”的主要功能是显示指定目录下的文件(或指定文件)的信息,然后根据参数的不同,又分为简单显示文件(目录)名,显示文件(目录)的详细信息等功能。了解了主要的功能之后,接下来我们就要看一下程序中主要的函数,看看它们主要完成什么任务实现何种功能。
        例如,

点击(此处)折叠或打开

  1. void display_attribute (struct stat buf, char * name)
  2. //函数功能:打印文件名为name的文件的详细信息

  3. void display_dir (int flag_param, char * path)
  4. //函数功能:为显示某个目录下的文件做准备,参数flag_param用于在调用display函数时作为其参数flag的实参,path时要显示的目录

        等等(一般的代码旁都会有注释或者单独的解释)

        清楚了各个函数的功能之后,我们对这个程序就有了大致的概念了,至少不会一眼看上去像在雾里探花!
        接下来,我们就要来分析主函数啦!前面清楚了各个函数的功能之后,在主函数中看到某函数就会知道哪个参数代表什么,哪条语句又完成什么功能,这样的话思路会比较清晰,当遇到不清楚的语句时,可以先放一放,因为你已经知道这一块代码的作用,具体的细节可以留到后面来看。带着这样的思路,把主函数过完一遍(越高质量的代码主函数越简洁(这是某位老师曾经告诉我的,嘻嘻)),基本上对整个程序有了一定的概念。
        然后我们就要再细一点,开始分析各个函数。关于函数的分析,个人觉得在看代码过程中一定要把它的功能时刻放在大脑的CPU里,这样在看具体代码的时候,就会有一种清晰的思路,理解代码也会相对容易一点!
        例如,看到这个函数时

点击(此处)折叠或打开

  1. void display_attribute (struct stat buf, char * name)

        前面已经知道它的功能是打印文件名为name的文件的详细信息
        什么?文件的详细信息?那是不是应该有一个或多个存放文件详细信息的结构体?
        好吧!我知道为什么会有以下语句了

点击(此处)折叠或打开

  1. struct passwd *psd;
  2. struct group *grp;

        至于下面这个东西用来干嘛,我不知道,就先放着,等到后面遇到在说

点击(此处)折叠或打开

  1. char buf_time[32];

        虽然语句后面有注释,但是要能不看注释自己理解那不是更好?更何况有时候看了注释不一定能及时理解!
        定义的部分看完了,到实现部分了,打印详细信息(函数功能一直放在脑子CPU里!嘿嘿。。。)?
        根据自己对“ls”的理解(读者肯定也对该程序的功能有一定了解,不然也不会看该程序(“该程序”是泛指)),首先要打印文件的类型,即“l,-,d,c”等等。于是,我又知道了下面一些语句的作用

点击(此处)折叠或打开

  1. if (S_ISLNK (buf.st_mode)) {
  2.          printf ("l");
  3.    }
  4.                :
  5.                :

        以此类推,我们又可以对每个函数有进一步的了解。至此,我们已经完成了大半部分了。接下来要做的就是仔细推敲每一条语句啦!个人觉得这部分就得靠自己的基础和其他方面的能力啦!
        
        最后补充一点:看代码最忌讳直接从头开始一句一句看,那种做法反正我个人觉得毫无效率可言。我之前曾深受其苦,不知道走了多少弯路!一定要有“框架”的意识!

阅读(1753) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~