高量量C/C++编程指南(媒介)(转载)

3个月前 (12-01 15:43)阅读2回复0
wsygfsj
wsygfsj
  • 管理员
  • 注册排名5
  • 经验值130995
  • 级别管理员
  • 主题26199
  • 回复0
楼主

  高量量C++/C编程指南

  文件形态[ ] 草稿文件[√] 正式文件[ ] 更矫正式文件 文件标识:

   当前版本: 1.0

   做 者: 林锐 博士

   完成日期: 2001年7月24日

  版 本 历 史

  版本/形态 做者 参与者 起行日期 备注

  V 0.9草稿文件 林锐 2001-7-1至2001-7-18 林锐草拟

  V 1.0正式文件 林锐 2001-7-18至2001-7-24 墨洪海审查V 0.9,林锐批改草稿中的错误

   目 录

  前 言 6

  第1章 文件构造 11

  1.1 版权和版本的声明 11

  1.2 头文件的构造 12

  1.3 定义文件的构造 13

  1.4 头文件的感化 13

  1.5 目次构造 14

  第2章 法式的版式 15

  2.1 空行 15

  2.2 代码行 16

  2.3 代码行内的空格 17

  2.4 对齐 18

  2.5 长行拆分 19

  2.6 润色符的位置 19

  2.7 正文 20

  2.8 类的版式 21

  第3章 定名规则 22

  3.1 共性规则 22

  3.2 简单的WINDOWS利用法式定名规则 23

  3.3 简单的UNIX利用法式定名规则 25

  第4章 表达式和根本语句 26

  4.1 运算符的优先级 26

  4.2 复合表达式 27

  4.3 IF 语句 27

  4.4 轮回语句的效率 29

  4.5 FOR 语句的轮回掌握变量 30

  4.6 SWITCH语句 30

  4.7 GOTO语句 31

  第5章 常量 33

  5.1 为什么需要常量 33

  5.2 CONST 与 #DEFINE的比力 33

  5.3 常量定义规则 33

  5.4 类中的常量 34

  第6章 函数设想 36

  6.1 参数的规则 36

  6.2 返回值的规则 37

  6.3 函数内部实现的规则 39

  6.4 其它定见 40

  6.5 利用断言 41

  6.6 引用与指针的比力 42

  第7章 内存治理 44

  7.1内存分配体例 44

  7.2常见的内存错误及其计谋 44

  7.3指针与数组的比照 45

  7.4指针参数是若何传递内存的? 47

  7.5 FREE和DELETE把指针怎么啦? 50

  7.6 动态内存会被主动释放吗? 50

  7.7 根绝“野指针” 51

  7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 52

  7.9 内存耗尽怎么办? 53

  7.10 MALLOC/FREE 的利用要点 54

  7.11 NEW/DELETE 的利用要点 55

  7.12 一些心得体味 56

  第8章 C++函数的高级特征 57

  8.1 函数重载的概念 57

  8.2 成员函数的重载、笼盖与隐躲 60

  8.3 参数的缺省值 63

  8.4 运算符重载 64

  8.5 函数内联 65

  8.6 一些心得体味 68

  第9章 类的构造函数、析构函数与赋值函数 69

  9.1 构造函数与析构函数的起源 69

  9.2 构造函数的初始化表 70

  9.3 构造和析构的次序 72

  9.4 示例:类STRING的构造函数与析构函数 72

  9.5 不要不放在眼里拷贝构造函数与赋值函数 73

  9.6 示例:类STRING的拷贝构造函数与赋值函数 73

  9.7 偷懒的办法处置拷贝构造函数与赋值函数 75

  9.8 若何在派生类中实现类的根本函数 75

  9.9 一些心得体味 77

  第10章 类的持续与组合 78

  10.1 持续 78

  10.2 组合 80

  第11章 其它编程体味 82

  11.1 利用CONST进步函数的强健性 82

  11.2 进步法式的效率 84

  11.3 一些有益的定见 85

  参考文献 87

  附录A :C++/C代码审查表 88

  附录B :C++/C试题 93

  附录C :C++/C试题的谜底与评分原则 97

  前 言

  软件量量是被大大都法式员挂在嘴上而不是放在心上的工具!

   除了完全外行和实正的编程高手外,初读本书,你更先的感触感染将是惊慌:“哇!我以前伪造的C++/C法式怎么会有那么多的弊端?”

   别难受,做者只不外比你早几年、多几次惊慌罢了。

   请花一两个小时认实阅读那本百页经书,你将会获益匪浅,那是前面N-1个读者的定见。

  一、编程老手与高手的误区

  自从计算机问世以来,法式设想就成了令人羡慕的职业,法式员在受人溺爱之后随便开展成为弊端特多却常能自我臭美的群体。

  现在在Internet上传播的“实正”的法式员据说是如许的:

  (1) 实正的法式员没有进度表,只要讨好指导的马屁精才有进度表,实正的法式员会让指导心惊胆战。

  (2) 实正的法式员不写利用阐明书,用户应当本身往料想法式的功用。

  (3) 实正的法式员几乎不写代码的正文,假设正文很难写,它天经地义也很难读。

  (4) 实正的法式员不画流程图,原始人和文盲才会干那事。

  (5) 实正的法式员不看参考手册,新手和胆怯鬼才会看。

  (6) 实正的法式员不写文档也不需要文档,只要看不懂法式的笨伯才用文档。

  (7) 实正的法式员认为本身比用户更大白用户需要什么。

  (8) 实正的法式员不承受团队开发的理念,除非他本身是头头。

  (9) 实正的法式员的法式不会在第一次就准确运行,但是他们情愿守着机器停止若干个30小时的调试改错。

  (10) 实正的法式员不会在上午9:00到下战书5:00之间工做,假设你看到他在上午9:00工做,那表白他从昨晚不断干到如今。

  具备上述特征越多,越显得程度高,资格老。所以别希罕,法式员的良多缺点竟然能够被当做长处来赏识。就象在武侠小说中,那些独来独往、不受约束且带点邪气的高手最令人崇敬。我曾经也如许崇奉,而且期看本身成为那样的“实正”的法式员,成果没有得到好下场。

  我从读大学到博士结业十年来不断勤奋勤学,累计编写了数十万行C++/C代码。有如许的苦劳和怠倦,我应该称得上是编程老手了吧?

  我开发的软件都与科研相关(集成电路CAD和3D图形学范畴),动辄数万行法式,手艺冗杂,难度颇高。那些软件频频获奖,有一个软件获得首届中国大学生电脑大赛软件展现一等奖。在1995年开发的一套图形软件库到2000年还有人买。枚举出那些“功绩”,能够阐明我算得上是编程高手了吧?

  可惜那种小我觉得不等于事实。

  读博期间我曾用一年时间开发了一个近10万行C++代码的3D图形软件产物,我心里自得外表谦虚地向一位实正的软件高手请教。他固然从未涉足过3D图形范畴,却在几非常钟内指出该软件多处严重设想错误。让人觉得那套软件是用纸糊的华贵衣服,扯一下掉一块,戳一下破个洞。我瞠目结舌地意识到那套软件毫无适用价值,一年的心血白化了,而且害死了本身的软件公司。

  人的顿悟凡是发作在最肉痛的时刻,在沮丧和肉痛之后,我做了深入反省,“面壁”半年,从头复习软件设想的根底常识。补修“内功”之后,又觉得腰板硬了起来。博士结业前半年,我曾到微软中国研究院找工做,承受微软公司一位资深软件工程师的面试。他让我写函数strcpy的代码。

  太随便了吧?

  错!

  那么一个小不点的函数,他从三个方面考察:

  (1)编程风气;

  (2)出错处置;

  (3)算法冗杂度阐发(用于进步性能)。

  在大学里历来没有人如斯严厉地考察过我的法式。我化了半个小时,修改了数次,他还不尽称心,让我回家好好揣摩。我精神振作地进“考场”,大汗淋漓地出“考场”。那“高手”当得也太窝囊了。我又好好地反省了一次。

  我把反省后的心得体味写成文章放在网上传阅,引起了很多软件开发人员的共喊。我因而有幸和国产大型IT企业如华为、上海贝尔、中兴等公司的同志们普遍交换。各人认为进步量量与消费率是软件工程要处理的核心问题。高量量法式设想长短常重要的环节,事实软件是靠编程来实现的。

  我们心目中的老手们和高手们能否编写出高量量的法式来?

  不见得都能!

  就我的履历与阅历来看,国内大学的计算机教诲压根就没有灌注贯注高量量法式设想的看念,教师们和学生们也很少自觉关心软件的量量。勤奋勤学的法式员持久在低量量的法式堆中滚爬,食尽苦头之后才有一些心得体味,出息极慢,我就是一例。

  如今国内IT企业拥有学士、硕士、博士文凭的软件开发人员触目皆是,但他们在承受大学教诲时就“先天不敷”,岂能一到企业就突然实现量的飞跃。试问有几软件开发人员对准确性、强健性、可靠性、效率、易用性、可读性(可理解性)、可扩展性、可复用性、兼容性、可移植性等量量属性洞若观火?而且能在理论中运用自若?。“高量量”可不是干活小心点就能实现的!

  我们有足够的理由疑虑:

  (1)编程老手可能会持久用隐含错误的体例编程(习惯成天然),发现弊端后都不肯相信那是实的!

  (2)编程高手能够在某一范畴写出极有程度的代码,但未必能从全局掌握软件量量的方方面面。

   事实证明如斯。我到上海贝尔工做一年来,陆续面试或测试过近百名“新”“老”法式员的编程技巧,量量合格率大约是10%。很少有人可以写出完全契合量量要求的if语句,良多法式员对指针、内存治理一知半解,……。

  指导们不敢相信那是实的。我做过现场试验:有一次部分新进14名硕士生,在开欢送会之前对他们停止“C++/C编程技巧”摸底测验。我问各人试题难不难?所有的人都答复不难。成果没有一小我及格,有对折人得零分。合作敌手公司的伴侣们也做过试验,同样一败涂地。

  实的不是我“心狠手辣”或者要求过高,而是良多软件开发人员对本身的要求不敷高。

  要晓得华为、上海贝尔、中兴等公司的员工程度在国内IT企业中是比力前列的,假使他们的编程量量都如斯差的话,我们怎么敢期看中小公司拿出高量量的软件呢?连法式都编欠好,还谈什么复兴民族软件财产,岂不胡扯。

  我诡计定义编程老手和编程高手,请您别见笑。

  定义1:能持久不变地编写出高量量法式的法式员称为编程老手。

  定义2:能持久不变地编写出高难度、高量量法式的法式员称为编程高手。

  根据上述定义,立即得到第一推论:我既不是高手也算不上是老手。

  在写此书前,我阅读了很多法式设想方面的英文著做,越看越羞惭。因为发现本身连编程根本技巧都未能全面掌握,顶多算是二流程度,还好意思谈什么老手和高手。期看和我一样在国内土生土长的法式员伴侣们可以做到:

  (1)知错就改;

  (2)经常温故而知新;

  (3)对峙进修,天天向上。

  二、本书导读

   起首请做附录B的C++/C试题(不要看谜底),考察本身的编程量量事实若何。然后参照谜底严厉打分。

  (1)假设你只得了几非常,请不要声张,也不要太难受。编程量量差往往是因为不良习惯形成的,与人的智力、才能没有多大关系,仍是有药可救的。功效越差,能够朝上进步的空间就越大,中国不就是在落后中赶超兴旺本钱主义国度吗?只要你能下决心改掉不良的编程习惯,第二次测验就能及格了。

  (2)假设你考及格了,表白你的手艺根底不错,期看你能虚心进修、不竭朝上进步。假设你还没有找到适宜的工做单元,无妨到上海贝尔试一试。

  (3)假设你考出85分以上的好功效,你有义务和资格为你所在的团队做“C++/C编程”培训。期看你能和我们多多交换、彼此促进。半年前我曾经发现一颗好苗子,就把他挖到我们小组来。

  (4)假设你在没有任何提醒的情状下考了满分,期看你能收我做你的门徒。

   编程测验完毕后,请阅读本书的注释。

   本书第一章至第六章次要阐述C++/C编程风气。难度不高,但是细节比力多。别小看了,进步量量就是要从那些点点滴滴做起。世上不存在更好的编程风气,一切因需求而定。团队开发讲究风气一致,假设造定了各人承认的编程风气,那么所有组员都要遵守。假设读者觉得本书的编程风气比力合你的工做,那么就摘用它,不要只看不做。人在小时候说话发音禁绝,写字潦草,假设不矫正,总有懊悔的时候。编程也是同样事理。

   第七章至第十一章是专题阐述,手艺难度比力高,看书时要积极根究。特殊是第七章“内存治理”,读了其实不表达懂了,懂了其实不表达就能准确利用。有一位同事看了第七章后觉得“野指针”写得不错,与我商讨了一把。可是过了两周,他告诉我,他忙了两天清查出一个Bug,想不到又是“野指针”出问题,只好重读第七章。

  光看本书对进步编程量量是有限的,定见各人阅读本书的参考文献,那些都是典范名著。

   假设你的编程量量已颠末关了,不要就此称心。假设你想成为优良的软件开发人员,定见你阅读并根据CMMI标准干事,让本身的综合程度上升一个台阶。上海贝尔的员工能够向收集利用事业部软件工程研究小组索取CMMI有关材料,更好能参与培训。

  三、版权声明

   本书的大部门内容取材于做者一年前的册本手稿(尚未出书),现整理汇编成为上海贝尔收集利用事业部的一个标准化文件,同时做为培训教材。

   因为C++/C编程是寡所周知的手艺,没有奥秘可言。编程的好体味应该各人共享,我们本身也是那么学来的。做者情愿公开本书的电子文档。

   版权声明如下:

  (1)读者能够肆意拷贝、修改本书的内容,但不成以窜改做者及所属单元。

  (2)未经做者答应,不得出书或大量印发本书。

  (3)假设合作敌手公司的员工得到本书,请勿公开利用,以免发作纠纷。

   估量到2002年7月,我们将成立切合中国国情的CMMI 3级处理计划。届时,包罗本书在内的约1000页标准将严厉受控。

   欢送读者对本书提出责备定见。

  林锐,2001年7月

0
回帖

高量量C/C++编程指南(媒介)(转载) 期待您的回复!

取消