做程序必不可少的是要读代码,可是怎样读代码呢?
你为什么要读代码?
A.了解功能是怎样实现的 B.提高代码阅读能力,进一步提高编程能力
A.了解功能是怎样实现的 B.提高代码阅读能力,进一步提高编程能力
方法:
1.首先要了解你所读的代码要实现的功能?
1.首先要了解你所读的代码要实现的功能?
2.你能在现有的环境下编译运行吗?
3.尝试调试
调试时,调用栈很重要,通过调用栈,你可以了解程序的执行流程。
调试时,调用栈很重要,通过调用栈,你可以了解程序的执行流程。
具体代码的阅读
1.文件
了解阅读代码的组织方式,哪些文件实现怎样的功能?
代码是怎样的风格?
代码是怎样的风格?
2.函数
对于短函数,不必了解过多,一般功能简单,可以直接看
对于短函数,不必了解过多,一般功能简单,可以直接看
长函数,一般由好几个短函数组成,首先了解短函数实现的功能,再了解长函数?
有些函数可以通过函数名来了解函数功能,可以跳过,若感觉奇怪可以回头再看
适当跳过一些错误处理,专心看正常流程,不要被细枝末节耽误了
人的智力是有限的,每次只能处理一件事情,可以从不同层次上看问题,记住函数实现的
功能,了解大的程序是如何由小模块组合起来的。然后,小模块又是怎样实现功能的。
除非你想了解其中的小模块的功能实现,否则只要了解该模块实现的功能就可以了。人的
智力和记忆力是有限的。我们做事情的时候要专心的做好要做的事情,不要考虑太多的。例如可以
在总体上考虑,得出一个计划,然后按照计划执行,并且根据执行的情况和当前的实际调整
计划。当执行的时候不需要也没有精力考虑计划的变化,我们所要做的就是把当前要做的事情
做好就可以了。
功能,了解大的程序是如何由小模块组合起来的。然后,小模块又是怎样实现功能的。
除非你想了解其中的小模块的功能实现,否则只要了解该模块实现的功能就可以了。人的
智力和记忆力是有限的。我们做事情的时候要专心的做好要做的事情,不要考虑太多的。例如可以
在总体上考虑,得出一个计划,然后按照计划执行,并且根据执行的情况和当前的实际调整
计划。当执行的时候不需要也没有精力考虑计划的变化,我们所要做的就是把当前要做的事情
做好就可以了。
借助一些工具来看代码,如sourceinsight vim+ctags+cscope等。
可以看看网上有没有读代码的心得什么的。
3.具体细节问题
变量要了解其代表的意义,有意义的东西才容易理解记忆。
数组要了解其下表表示什么,其元素值是什么意思。
循环语句了解循环的初始状态是什么,状态怎样变化,结束条件是什么,
在每一步都实现了怎样的功能。
判断语句了解判断条件是什么意思,还有在不同情况下处理方式有哪些不同。
c语言函数指针,这个一般出现在结构体中,这些函数指针起到c++中虚函数,一般在初始化时,会赋值。
变量要了解其代表的意义,有意义的东西才容易理解记忆。
数组要了解其下表表示什么,其元素值是什么意思。
循环语句了解循环的初始状态是什么,状态怎样变化,结束条件是什么,
在每一步都实现了怎样的功能。
判断语句了解判断条件是什么意思,还有在不同情况下处理方式有哪些不同。
c语言函数指针,这个一般出现在结构体中,这些函数指针起到c++中虚函数,一般在初始化时,会赋值。
4.有时候会突然想要了解一个函数的具体实现,怎样找到这个函数?
A.首先用代码阅读工具来找,通常代码阅读工具都能够找到
B.在有些情况下代码阅读工具找不到:如奇怪的宏定义,符号连接##语法,特殊前缀。
对于这些特殊的语法,可以考虑用硬搜索的方法,或者猜测。一旦了解了各个文件都实行
了怎样的功能,我们就可以猜测函数可能在哪里实行,到具体的文件中找要容易一些。
隐藏在函数接口背后的?
一般通过函数名和函数参数可以猜测函数功能。然而有些东西看不到,如:
A.static extern 变量
B.结构体变量,结构体变量通常元素较多,很难了解所有的元素意义,并且当前函数可
能只用到其中的几个元素,且当前结构体中的某些元素还没有初值,有值也是没有意义的。如果元素
包含指针,该指针指向其他的结构体,那么有需要了解他指向的结构体。我们需要的就是,
根据函数用到的那些元素,补全函数接口。
一般通过函数名和函数参数可以猜测函数功能。然而有些东西看不到,如:
A.static extern 变量
B.结构体变量,结构体变量通常元素较多,很难了解所有的元素意义,并且当前函数可
能只用到其中的几个元素,且当前结构体中的某些元素还没有初值,有值也是没有意义的。如果元素
包含指针,该指针指向其他的结构体,那么有需要了解他指向的结构体。我们需要的就是,
根据函数用到的那些元素,补全函数接口。
了解函数变量的作用域可以了解函数或变量的影响力
舍弃的重要性
对于大函数,阅读时一定要注意舍弃小函数的阅读,只要该小函数不影响阅读,可以直接跳过,如果
不这样做,将耗费大量的脑力,而且效果不好
对于大函数,阅读时一定要注意舍弃小函数的阅读,只要该小函数不影响阅读,可以直接跳过,如果
不这样做,将耗费大量的脑力,而且效果不好