高质量程序设计指南-C++C语言.ppt

上传人:xt****7 文档编号:22710008 上传时间:2021-05-30 格式:PPT 页数:12 大小:513.50KB
返回 下载 相关 举报
高质量程序设计指南-C++C语言.ppt_第1页
第1页 / 共12页
高质量程序设计指南-C++C语言.ppt_第2页
第2页 / 共12页
高质量程序设计指南-C++C语言.ppt_第3页
第3页 / 共12页
点击查看更多>>
资源描述
C+/C编程规范 帮助程序员一次性编写出高质量的程序 林 锐 博士 http:/ 上 海 漫 索 计 算 机 科 技 有 限 公 司 Page 2 目录 0. 编程老手和高手的误区 1. 程序的版式 2. 命名规则 3. 表达式和基本语句 4. 函数设计 5. 内存管理 6. C+/C试题与答案,代码检查表 Page 3 0. 编程老手和高手的误区 自我臭美的程序员 程序员不同于武林人士,我们不要崇拜邪派高手 大学计算机教育的失误:从来就没有重视质量,绝大多数学士、硕士、博士不了解软件质量,不 知道如何有效地提高软件的质量。 高校毕业生 C+/C编程考试的结果:程序质量低下 什么是编程老手:能够长期稳定地编写出高质量程序的程序员 什么是编程高手:能够长期稳定地编写出高难度、高质量程序的程序员 Page 4 1. 程序的版式 1.1 文件结构 版权和版本 头文件的作用 头文件和定义文件的结构,正确使用 include, ifndef/define/endif 目录结构 1.2 版式 空行,代码行 代码行内的空格 对齐 修饰符 * 4.3 函数内部实现的规则: 在函数体的 “ 入口处 ” 和 “ 出口处 ” 从严把关 在函数体的 “ 入口处 ” ,对参数的有效性进行检查。 在函数体的 “ 出口处 ” ,对 return语句的正确性和效率进行检查。 Page 8 4. 函数设计 4.4 一些建议 函数的功能要单一,不要设计多用途的函数。 函数体的规模要小,尽量控制在 50行代码之内。 尽量避免函数带有 “ 记忆 ” 功能。相同的输入应当产生相同的输出。带有 “ 记忆 ” 功能的函数, 其行为可能是不可预测的,因为它的行为可能取决于某种 “ 记忆状态 ” 。 不仅要检查输入参数的有效性,还要检查通过其他途径进入函数体内的变量的有效性,例如全局 变量、文件句柄等。 用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误情况。 4.5 使用断言 使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存 在的并且是一定要做出处理的。 在函数的入口处,使用断言检查参数的有效性(合法性)。 在编写函数时,要进行反复的考查,并且自问: “ 我打算做哪些假定? ” 一旦确定了的假定,就 要使用断言对假定进行检查。 Page 9 5. 内存管理 5.1 内存分配方式 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都 存在。例如全局变量, static变量。 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这 些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存 容量有限。 从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc或 new申请任意多少的内存,程序员 自己负责在何时用 free或 delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题 也最多。 5.2 常见的内存错误 内存分配未成功,却使用了它。 内存分配虽然成功,但是尚未初始化就引用它。 内存分配成功并且已经初始化,但操作越过了内存的边界。 忘记了释放内存,造成内存泄漏。 释放了内存却继续使用它 Page 10 5. 内存管理 5.3 对策 用 malloc或 new申请内存之后,应该立即检查指针值是否为 NULL。 防止使用指针值为 NULL的内存 。 不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。 避免数组或指针的下标越界,特别要当心发生 “ 多 1” 或者 “ 少 1” 操作。 动态内存的申请与释放必须配对,防止内存泄漏。 用 free或 delete释放了内存之后,立即将指针设置为 NULL, 防止产生 “ 野指针 ” 。 5.4 free 和 delete 把指针怎么啦? 它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。 指针 p被 free以后其地址仍然不变(非 NULL), 只是该地址对应的内存是垃圾, p成了 “ 野指针 ” 。如果此时不把 p设置为 NULL, 会让人误以为 p是个合法的指针。 如果程序比较长,我们有时记不住 p所指的内存是否已经被释放,在继续使用 p之前,通常会用语 句 if (p != NULL)进行防错处理。很遗憾,此时 if语句起不到防错作用,因为即便 p不是 NULL指 针,它也不指向合法的内存块。 “ 野指针 ” 示例 5.5 动态内存会被自动释放吗?示例 指针消亡了,并不表示它所指的内存会被自动释放。 内存被释放了,并不表示指针会消亡或者成了 NULL指针。 Page 11 5. 内存管理 5.6 杜绝野指针 “ 野指针 ” 不是 NULL指针,是指向 “ 垃圾 ” 内存的指针。人们一般不会错用 NULL指针,因为用 if 语句很容易判断。但是 “ 野指针 ” 是很危险的, if语句对它不起作用。 “ 野指针 ” 的成因主要有三种: 指针变量没有被初始化。任何指针变量刚被创建时不会自动成为 NULL指针,它的默认值 是随机的,它会乱指一气。 指针 p被 free或者 delete之后,没有置为 NULL, 让人误以为 p是个合法的指针。 指针操作超越了变量的作用范围。这种情况让人防不胜防 5.7 有了 malloc/free 为什么还要 new/delete Malloc/free 是库函数, new/delete是运算符。 光用 maloc/free无法满足动态对象的要求 。 对象在创建的同时要自动执行构造函数 , 对象在消亡 之前要自动执行析构函数 。 由于 malloc/free是库函数而不是运算符 , 不在编译器控制权限之内 , 不能够把执行构造函数和析构函数的任务强加于 malloc/free。 因此 C+语言需要一个能完成动 态内存分配和初始化工作的运算符 new, 以及一个能完成清理与释放内存工作的运算符 delete。 5.8 内存耗尽怎么办? 5.9 建议: 必须养成“使用调试器逐步跟踪程序”的习惯,只有这样才能发现问 题的本质。 Page 12 6. C+/C试题与答案, 代码检查表 详见高质量程序设计指南 C+/C语言 (第二版) 的附录,电子工业出版 社, 2003年 6月
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!