您现在的位置: > 新闻资讯 > 人物焦点 >

如何看懂一段代码

时间:2020-09-16 01:23 点击:

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

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

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

点击(此处)折叠或打开

void display_attribute (struct stat buf, char * name)

//函数功能:打印文件名为name的文件的详细信息


void display_dir (int flag_param, char * path)

//函数功能:为显示某个目录下的文件做准备,参数flag_param用于在调用display函数时作为其参数flag的实参,path时要显示的目录


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

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

点击(此处)折叠或打开

void display_attribute (struct stat buf, char * name)


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

点击(此处)折叠或打开

struct passwd *psd;

struct group *grp;


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

点击(此处)折叠或打开

char buf_time[32];


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


点击(此处)折叠或打开

if (S_ISLNK (buf.st_mode)) {

         printf ("l");

   }

               :

作者:采集侠  来源:网络整理
  • 电脑维修知识网(xxxxxx.com) © 2014 版权所有 All Rights Reserved.
  • Email:pcweixiu@tom.com 站长QQ:20567788
  • 技术支持与报障: 电脑维修知识网