原代码的阅读方法(2)
8.我们要充分利用调试器|编译器给出的警告或输出的符号代码|系统调用跟踪器|数据库结构化查询语言的日志机制|包转储工具和Windows的消息侦查程序, 定出的bug的位置.
9.对于那些大型且组织良好的系统, 您只需要最低限度地了解它的全部功能, 就能够对它做出修改.
10.当向系统中增加新功能时, 首先的任务就是找到实现类似特性的代码, 将它作为待实现功能的模板.
11.从特性的功能描述到代码的实现, 可以按照字符串消息, 或使用关键词来搜索代码.
12.在移植代码或修改接口时, 您可以通过编译器直接定位出问题涉及的范围, 从而减少代码阅读的工作量.
13.进行重构时, 您从一个能够正常工作的系统开始做起, 希望确保结束时系统能够正常工作. 一套恰当的测试用例(test case)可以帮助您满足此项约束.
14.阅读代码寻找重构机会时, 先从系统的构架开始, 然后逐步细化, 能够获得最大的效益.
15.代码的可重用性是一个很诱人, 但难以理解与分离, 可以试着寻找粒度更大一些的包, 甚至其他代码.
16.在复查软件系统时, 要注意, 系统是由很多部分组成的, 不仅仅只是执行语句. 还要注意分析以下内容: 文件和目录结构|生成和配置过程,用户界面和系统的文档.
18.可以将软件复查作为一个学习|讲授|援之以手和接受帮助的机会. ++++++++++++++++++++
第二章: 基本编程元素
++++++++++++++++++++
19.第一次分析一个程序时, main是一个好的起始点.
20.层叠if-else if-...-else序列可以看作是由互斥选择项组成的选择结构.
21.有时, 要想了解程序在某一方面的功能, 运行它可能比阅读源代码更为恰当.
22.在分析重要的程序时, 最好首先识别出重要的组成部分.
23.了解局部的命名约定, 利用它们来猜测变量和函数的功能用途.
24.当基于猜测修改代码时, 您应该设计能够验证最初假设的过程. 这个过程可能包括用编译器进行检查|引入断言|或者执行适当的测试用例.
25.理解了代码的某一部分, 可能帮助你理解余下的代码.
26.解决困难的代码要从容易的部分入手.
27.要养成遇到库元素就去阅读相关文档的习惯; 这将会增强您阅读和编写代码的能力.
28.代码阅读有许多可选择的策略: 自底向上和自顶向下的分析|应用试探法和检查注释和外部文档, 应该依据问题的需要尝试所有这些方法.
29.for (i=0; i 30.涉及两项不等测试(其中一项包括相等条件)的比较表达式可以看作是区间成员测试. 31.我们经常可以将表达式应用在样本数据上, 借以了解它的含义. 32.使用De Morgan法则简化复杂的逻辑表达式. 33.在阅读逻辑乘表达式时, 问题可以认为正在分析的表达式以左的表达式均为true; 在阅读逻辑和表达式时, 类似地, 可以认为正在分析的表达式以左的表达式均为false. 34.重新组织您控制的代码, 使之更为易读. 35.将使用条件运行符? :的表达式理解为if代码. 36.不需要为了效率, 牺牲代码的易读性. 37.高效的算法和特殊的优化确实有可能使得代码更为复杂, 从而更难理解, 但这并不意味着使代码更为紧凑和不易读会提高它的效率. 38.创造性的代码布局可以用来提高代码的易读性. 39.我们可以使用空格|临时变量和括号提高表达式的易读性. 40.在阅读您所控制的代码时, 要养成添加注释的习惯. 41.我们可以用好的缩进以及对变量名称的明智选择, 提高编写欠佳的程序的易读性. 42.用diff程序分析程序的修订历史时, 如果这段历史跨越了整体重新缩排, 常常可以通过指定-w选项, 让diff忽略空白差异, 避免由于更改了缩进层次而引入的噪音. 43.do循环的循环体至少执行一次. 44.执行算术运算时, 当b=2n-1时, 可以将a&b理解为a%(b+1). 45.将a< 46.将a>>n理解为a/k, k=2n. 47.每次只分析一个控制结构, 将它的内容看作是一个黑盒. 48.将每个控制结构的控制表达式看作是它所包含代码的断言. 49.return, goto, break和continue语句, 还有异常, 都会影响结构化的执行流程. 由于这些语句一般都会终止或重新开始正在进行的循环,因此要单独推理它们的行为. 50.用复杂循环的变式和不变式, 对循环进行推理. 51.使用保持含义不变的变换重新安排代码, 简化代码的推理工作. +++++++++++++++++++ 第三章: 高级C数据类型 +++++++++++++++++++ 52.了解特定语言构造所服务的功能之后, 就能够更好地理解使用它们的代码. 53.识别并归类使用指针的理由. 54.在C程序中, 指针一般用来构造链式数据结构|动态分配的数据结构|实现引用调用|访问和迭代数据元素|传递数组参数|引用函数|作为其他值的别名|代表字符串|以及直接访问系统内存. 55.以引用传递的参数可以用来返回函数的结果, 或者避免参数复制带来的开销. 56.指向数组元素地址的指针, 可以访问位于特定索引位置的元素. 57.指向数组元素的指针和相应的数组索引, 作用在二者上的运算具有相同的语义. 58.使用全局或static局部变量的函数大多数情况都不可重入(reentrant). 59.字符指针不同于字符数组. 60.识别和归类应用结构或共用体的每种理由. 61.C语言中的结构将多个数据元素集合在一起, 使得它们可以作为一个整体来使用, 用来从函数中返回多个数据元素|构造链式数据结构|映射数据在硬件设备|网络链接和存储介质上的组织方式|实现抽象数据类型|以及以面向对象的方式编程. 62.共用体在C程序中主要用于优化存储空间的利用|实现多态|以及访问数据不同的内部表达方式. 63.一个指针, 在初始化为指向N个元素的存储空间之后, 就可以作为N个元素的数组来使用. 64.动态分配的内在块可以电焊工地释放, 或在程序结束时释放, 或由垃圾回收器来完成回收; 在栈上分配的内存块当分配它的函数退出后释放 65.C程序使用typedef声明促进抽象, 并增强代码的易读性, 从而防范可移植性问题, 并模拟C++和Java的类声明行为. 66.可以将typedef声明理解成变量定义: 变量的名称就是类型的名称; 变量的类型就是与该名称对应的类型. +++++++++++++++ 第四章: C数据结构 +++++++++++++++ 67.根据底层的抽象数据类型理解显式的数据结构操作. 68.C语言中, 一般使用内建的数组类型实现向量, 不再对底层实现进行抽象. 69.N个元素的数组可以被序列for (i=0; i 70.表达式sizeof(x)总会得到用memset或memcpy处理数组x(不是指针)所需 的正确字节数. 71.区间一般用区间内的第一个元素和区间后的第一个元素来表示. 72.不对称区间中元素的数目等于高位边界与低位边界的差. 73.当不对称区间的高位边界等于低位边界时, 区间为空. 74.不对称区间中的低位边界代表区间的第一个元素; 高位边界代表区间外的第一个元素. 75.结构的数组常常表示由记录和字段组成的表.
…… 此处隐藏:1337字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [法律文档]苏教版七年级语文下册第五单元教学设计
- [法律文档]向市委巡视组进点汇报材料
- [法律文档]绵阳市2018年高三物理上学期第二次月考
- [法律文档]浅析如何解决当代中国“新三座大山”的
- [法律文档]延安北过境线大桥工程防洪评价报告 -
- [法律文档]激活生成元素让数学课堂充满生机
- [法律文档]2014年春学期九年级5月教学质量检测语
- [法律文档]放射科标准及各项计1
- [法律文档]2012年广州化学中考试题和答案(原版)
- [法律文档]地球物理勘查规范
- [法律文档]《12系列建筑标准设计图集》目录
- [法律文档]2018年宁波市专技人员继续教育公需课-
- [法律文档]工会委员会工作职责
- [法律文档]2014新版外研社九年级英语上册课文(完
- [法律文档]《阅微草堂笔记》部分篇目赏析
- [法律文档]尔雅军事理论2018课后答案(南开版)
- [法律文档]储竣-13827 黑娃山沟大开挖穿越说明书
- [法律文档]《产品设计》教学大纲及课程简介
- [法律文档]电动吊篮专项施工方案 - 图文
- [法律文档]实木地板和复合地板的比较
- 探析如何提高电力系统中PLC的可靠性
- 用Excel函数快速实现体能测试成绩统计
- 教师招聘考试重点分析:班主任工作常识
- 高三历史选修一《历史上重大改革回眸》
- 2013年中山市部分职位(工种)人力资源视
- 2015年中国水溶性蛋白市场年度调研报告
- 原地踏步走与立定教学设计
- 何家弘法律英语课件_第十二课
- 海信冰箱经销商大会——齐俊强副总经理
- 犯罪心理学讲座
- 初中英语作文病句和错句修改范例
- 虚拟化群集部署计划及操作流程
- 焊接板式塔顶冷凝器设计
- 浅析语文教学中
- 结构力学——6位移法
- 天正建筑CAD制图技巧
- 中华人民共和国财政部令第57号——注册
- 赢在企业文化展厅设计的起跑线上
- 2013版物理一轮精品复习学案:实验6
- 直隶总督署简介




