【代码阅读的方法与实践】第2章 基本编程元素
来源:互联网 发布:淘宝图片大小多少合适 编辑:程序博客网 时间:2024/06/05 17:03
第2章 基本编程元素
多数情况下,代码阅读是一项自底向上的活动。
用编译器对代码进行编译,检查产生的警告信息。
分析一个程序时,main是一个好的起点,就是要从最重要的部分开始。
要了解一个函数的功用,可以使用以下的策略:
l 猜,基于函数名
l 阅读位于函数开始部分的注释
l 分析如何使用该函数
l 阅读函数体的代码
l 查阅外部的程序文档
阅读代码时,常会采用渐进式理解的方式。理解了这一部分代码可能会使得其它部分变得十分明晰。
每次只分析一个控制结构,将它的内容看作是一个黑盒,结构化编程的优点就是:它采用控制结构,允许抽象和选择性地推理程序的各个组成部分,而不必考虑程序总体的复杂性。
层叠if-else if-... -else 序列可以看作是由互斥选择项组成的选择结构。
所有输出函数,特别在程序的标准输出重定向到文件时,都有可能由于各种原因而失败
l 存储输出的设备没有剩余空间
l 设备上分配给用户的空间可能耗尽
l 进程对文件的写入可能超出进程或文件大小的最大限制
l 输出设备上可能发生硬件错误
l 文件描述符或与标准输出关联的流或许不能写入
不检查输出操作的结果可能引起程序悄然失败,在没有任何警告的情况下丢失输出。一个实用的办法就是在程序结束前,检查标准输出流上的错误。
有时,要想了解程序在某一方面的功能,运行它可能比阅读源代码更为恰当。
在分析重要的程序时,最好首先识别出重要的组成部分。
了解局部的命名约定,利用它们来猜测变量和函数的功能用途。
当基于猜测修改代码时,您应该设计能够验证最初假设的过程。这个过程可能包括用编译器进行检查、引入断言、或者执行适当的测试用例。
理解了代码的某一部分,可能帮助您理解余下的代码。
解决困难的代码要从容易的部分入手。
要养成遇到库元素就去阅读相关文档的习惯;这将会增强您阅读和编写代码的能力。
代码阅读有许多可选择的策略:自底向上和自顶向下的分析、应用试探法和检查注释和外部文档,应该依据问题的需要尝试所有这些方法。
for(i=0; i<n; i++) r 形式的循环执行n次;其他任何形式都要小心。
涉及两项不等测试(其中一项包括相等条件)的比较表达式可以看作是区间成员测试。
我们经常可以将表达式应用在样本数据上,借以了解它的含义。
使用De Morgan法则简化复杂的逻辑表达式。
在阅读逻辑乘表达式时,总是可以认为正在分析的表达式以左的表达式均为true;在阅读逻辑和表达式时,类似地,可以认为正在分析的表达式以左的表达式均为false。
重新组织您控制的代码,使之更为易读。
将使用条件运算符?:的表达式理解为if代码。
不需要为了效率,牺牲代码的易读性。
高效的算法和特殊的优化确实有可能使得代码更为复杂,从而更难理解,但这并不意味着使代码更为紧凑和不易读会提高它的效率。
创造性的代码可以用来提高代码的易读性。
我们可以使用空格、临时变量和括号提高表达式的易读性。
在阅读您所控制的代码时,要养成添加注释的习惯。
我们可以用好的缩进以及对变量名称的明智选择,提高编写欠佳的程序的易读性。
用diff程序分析程序的修订历史时,如果这段历史跨越了整体重新缩排,常常可以通过指定-w选项,让diff忽略空白差异,避免由于更改了缩进层次而引入的噪音。
do循环的循环体至少执行一次。
执行算术运算时,当b=2^n-1时,可以将a&b理解为a%(b+1)。
将a<<n理解为a * k , k = 2 ^ n。
将每个控制结构的控制表达式看作是它所含代码的断言。
return, goto, break 和continue语句,还有异常,都会影响结构化的执行流程。由于这些语句一般都会终止或重新开始正在进行的循环,因此要单独推理它们的行为。
用复杂循环的变式和不变式,对循环进行推理。
使用保持含义不变的变换重新安排代码,简化代码的推理工作。
- 【代码阅读的方法与实践】第2章 基本编程元素
- 【代码阅读的方法与实践】第1章 导论
- 【代码阅读的方法与实践】第8章 文档
- 【代码阅读的方法与实践】第10章 代码阅读工具
- 代码阅读----基本编程元素
- 【代码阅读的方法与实践】第3章 高级C数据类型
- 【代码阅读的方法与实践】第4章 C数据结构
- 【代码阅读的方法与实践】第5章 高级控制流程
- 【代码阅读的方法与实践】第6章 应对大型项目
- 【代码阅读的方法与实践】第7章 编码规范和约定
- 【代码阅读的方法与实践】第9章 系统构架
- 代码阅读方法与实践
- 代码阅读方法与实践
- 代码阅读方法与实践
- 关于阅读源代码的误区《代码阅读方法与实践》
- 摘自代码阅读方法与实践书籍的知识点总结
- 摘自代码阅读方法与实践书籍的知识点总结
- 代码阅读方法与实践总结
- 基于S3C2410的SD卡linux驱动工作原理(二)
- 关于java.lang.IllegalArgumentException: View not attached to window manager 错误的分析
- Hibernate Session方法小结
- linux设备驱动那点事儿之SD卡驱动理论篇
- Hibernate中两种获取Session的方式
- 【代码阅读的方法与实践】第2章 基本编程元素
- 【代码阅读的方法与实践】第3章 高级C数据类型
- 【代码阅读的方法与实践】第4章 C数据结构
- 【代码阅读的方法与实践】第5章 高级控制流程
- 【代码阅读的方法与实践】第6章 应对大型项目
- 【代码阅读的方法与实践】第7章 编码规范和约定
- 【代码阅读的方法与实践】第8章 文档
- 【代码阅读的方法与实践】第9章 系统构架
- UVa 100 / HDU 1032 / POJ 1207 The 3n + 1 problem (数论&Collatz序列周期)