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

上传人:自*** 文档编号:127519110 上传时间:2020-04-03 格式:PPT 页数:12 大小:513.50KB
返回 下载 相关 举报
高质量程序设计指南-C++C语言.ppt_第1页
第1页 / 共12页
高质量程序设计指南-C++C语言.ppt_第2页
第2页 / 共12页
高质量程序设计指南-C++C语言.ppt_第3页
第3页 / 共12页
高质量程序设计指南-C++C语言.ppt_第4页
第4页 / 共12页
高质量程序设计指南-C++C语言.ppt_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《高质量程序设计指南-C++C语言.ppt》由会员分享,可在线阅读,更多相关《高质量程序设计指南-C++C语言.ppt(12页珍藏版)》请在金锄头文库上搜索。

1、C C编程规范 帮助程序员一次性编写出高质量的程序林锐博士linrui 上海漫索计算机科技有限公司 目录 0 编程老手和高手的误区1 程序的版式2 命名规则3 表达式和基本语句4 函数设计5 内存管理6 C C试题与答案 代码检查表 详见高质量程序设计指南 C C语言 第二版 0 编程老手和高手的误区 自我臭美的程序员程序员不同于武林人士 我们不要崇拜邪派高手大学计算机教育的失误 从来就没有重视质量 绝大多数学士 硕士 博士不了解软件质量 不知道如何有效地提高软件的质量 高校毕业生C C编程考试的结果 程序质量低下什么是编程老手 能够长期稳定地编写出高质量程序的程序员什么是编程高手 能够长期稳

2、定地编写出高难度 高质量程序的程序员 1 程序的版式 1 1文件结构版权和版本头文件的作用头文件和定义文件的结构 正确使用include ifndef define endif目录结构1 2版式空行 代码行代码行内的空格对齐修饰符 的位置注释类的版式 public private前后之争 2 命名规则 不要追求世界上最好的命名规则 在机构内部一致即可 匈牙利法的利弊一些共性规则 直观并且可以拼读 可望文知意 不必 解码 名字的长度 min length max information原则与操作系统和开发工具的风格保持一致程序中不要出现仅靠大小写区分的相似的标识符程序中不要出现标识符完全相同的局

3、部变量和全局变量变量的名字应当使用 名词 或者 形容词 名词 全局函数的名字应当使用 动词 或者 动词 名词 动宾词组 类的成员函数应当只使用 动词 被省略掉的名词就是对象本身 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等尽量避免名字中出现数字编号 如Value1 Value2等 除非逻辑上的确需要编号 3 表达式和基本语句 3 1表达式如果代码行中的运算符比较多 用括号确定表达式的操作顺序 避免使用默认的优先级 不要编写太复杂的复合表达式 不要把程序中的复合表达式与 真正的数学表达式 混淆 例如if a b c 3 2你会编写正确的if语句吗布尔变量与零值比较整型变量与零值比较浮

4、点变量与零值比较指针变量与零值比较为什么有人用If NULL P 这样 古怪 的格式3 3循环语句在多重循环中 如果有可能 应当将最长的循环放在最内层 最短的循环放在最外层 以减少CPU跨切循环层的次数 如果循环体内存在逻辑判断 并且循环次数很大 宜将逻辑判断移到循环体的外面 建议for语句的循环控制变量的取值采用 半开半闭区间 写法 3 4switch goto 4 函数设计 4 1参数的规则参数的书写要完整 不要贪图省事只写参数的类型而省略参数名字 参数命名要恰当 顺序要合理 示例StringCopy char str1 char str2 如果参数是指针 且仅做输入用 则应在类型前加co

5、nst 以防止该指针在函数体内被意外修改 避免函数有太多的参数 参数个数尽量控制在5个以内 如果参数太多 在使用时容易将参数类型或顺序搞错 尽量不要使用类型和数目不确定的参数 例如printf4 2返回值的规则不要省略返回值的类型 函数名字与返回值类型在语义上不可冲突 例如getchar不要将正常值和错误标志混在一起返回 正常值用输出参数获得 而错误标志用return语句返回 有时候函数原本不需要返回值 但为了增加灵活性如支持链式表达 可以附加返回值 例如char strcpy char strDest constchar strSrc 4 3函数内部实现的规则 在函数体的 入口处 和 出口处

6、 从严把关在函数体的 入口处 对参数的有效性进行检查 在函数体的 出口处 对return语句的正确性和效率进行检查 4 函数设计 4 4一些建议函数的功能要单一 不要设计多用途的函数 函数体的规模要小 尽量控制在50行代码之内 尽量避免函数带有 记忆 功能 相同的输入应当产生相同的输出 带有 记忆 功能的函数 其行为可能是不可预测的 因为它的行为可能取决于某种 记忆状态 不仅要检查输入参数的有效性 还要检查通过其他途径进入函数体内的变量的有效性 例如全局变量 文件句柄等 用于出错处理的返回值一定要清楚 让使用者不容易忽视或误解错误情况 4 5使用断言使用断言捕捉不应该发生的非法情况 不要混淆非

7、法情况与错误情况之间的区别 后者是必然存在的并且是一定要做出处理的 在函数的入口处 使用断言检查参数的有效性 合法性 在编写函数时 要进行反复的考查 并且自问 我打算做哪些假定 一旦确定了的假定 就要使用断言对假定进行检查 5 内存管理 5 1内存分配方式从静态存储区域分配 内存在程序编译的时候就已经分配好 这块内存在程序的整个运行期间都存在 例如全局变量 static变量 在栈上创建 在执行函数时 函数内局部变量的存储单元都可以在栈上创建 函数执行结束时这些存储单元自动被释放 栈内存分配运算内置于处理器的指令集中 效率很高 但是分配的内存容量有限 从堆上分配 亦称动态内存分配 程序在运行的时

8、候用malloc或new申请任意多少的内存 程序员自己负责在何时用free或delete释放内存 动态内存的生存期由我们决定 使用非常灵活 但问题也最多 5 2常见的内存错误内存分配未成功 却使用了它 内存分配虽然成功 但是尚未初始化就引用它 内存分配成功并且已经初始化 但操作越过了内存的边界 忘记了释放内存 造成内存泄漏 释放了内存却继续使用它 5 内存管理 5 3对策用malloc或new申请内存之后 应该立即检查指针值是否为NULL 防止使用指针值为NULL的内存 不要忘记为数组和动态内存赋初值 防止将未被初始化的内存作为右值使用 避免数组或指针的下标越界 特别要当心发生 多1 或者 少

9、1 操作 动态内存的申请与释放必须配对 防止内存泄漏 用free或delete释放了内存之后 立即将指针设置为NULL 防止产生 野指针 5 4free和delete把指针怎么啦 它们只是把指针所指的内存给释放掉 但并没有把指针本身干掉 指针p被free以后其地址仍然不变 非NULL 只是该地址对应的内存是垃圾 p成了 野指针 如果此时不把p设置为NULL 会让人误以为p是个合法的指针 如果程序比较长 我们有时记不住p所指的内存是否已经被释放 在继续使用p之前 通常会用语句if p NULL 进行防错处理 很遗憾 此时if语句起不到防错作用 因为即便p不是NULL指针 它也不指向合法的内存块

10、野指针 示例5 5动态内存会被自动释放吗 示例指针消亡了 并不表示它所指的内存会被自动释放 内存被释放了 并不表示指针会消亡或者成了NULL指针 5 内存管理 5 6杜绝野指针 野指针 不是NULL指针 是指向 垃圾 内存的指针 人们一般不会错用NULL指针 因为用if语句很容易判断 但是 野指针 是很危险的 if语句对它不起作用 野指针 的成因主要有三种 指针变量没有被初始化 任何指针变量刚被创建时不会自动成为NULL指针 它的默认值是随机的 它会乱指一气 指针p被free或者delete之后 没有置为NULL 让人误以为p是个合法的指针 指针操作超越了变量的作用范围 这种情况让人防不胜防5

11、 7有了malloc free为什么还要new deleteMalloc free是库函数 new delete是运算符 光用maloc free无法满足动态对象的要求 对象在创建的同时要自动执行构造函数 对象在消亡之前要自动执行析构函数 由于malloc free是库函数而不是运算符 不在编译器控制权限之内 不能够把执行构造函数和析构函数的任务强加于malloc free 因此C 语言需要一个能完成动态内存分配和初始化工作的运算符new 以及一个能完成清理与释放内存工作的运算符delete 5 8内存耗尽怎么办 5 9建议 必须养成 使用调试器逐步跟踪程序 的习惯 只有这样才能发现问题的本质 6 C C试题与答案 代码检查表 详见 高质量程序设计指南 C C语言 第二版 的附录 电子工业出版社 2003年6月

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号