c专家编程.pdf

5星(超过95%的资源)
所需积分/C币:35 2015-07-07 13:05:59 13.45MB PDF
3
收藏 收藏
举报

c专家编程.pdf 业类权威著作,值得学习
内容提要 《C专家编程》展示了最优秀的C程序员所使用的编码技巧,并专门开辟了一章对C++ 的基础知识进行了介绍 书中C的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学 习C艹+等问题进行了细致的讲解和深入的分析。全书撷取几十个实例进行讲解,对C程序员 具有非常高的实用价值 本书可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言 基础的程序员,本书可以帮助他们站在C的高度了解和学习C++。 序 最近,我逛了一家书店,当我看到大量枯燥乏味的C和¢艹+籍时,心情格外沮丧:我 发现极少有作者想向读者传达这样一个信念:任何人都可以亨受编科。在υ长而乏味的阅读 过程中,所有的奇妙和乐趣都烟消云散了。如果你硬荇头皮把它啃亢,或许会有长进。但编 程本来不该是这个样子的呀 编程应该是一项精妙绝伦、充满生机、富有挑战约汘动,而讲述编程的书籍也应时时迸 射出激情的火化。本书也是本教学性质的书籍,但它希望重新把快乐融入编稈之中。如果 木书不合你的口味,请把它放回到书架上,但务必放到更显眼的位置上,这里先谢过 好,听了这个开场白,你不免有所疑问:关于C语言编程的书可以说是不胜枚举,那么 这本书又有什么独到之处呢? 《C专家编程》应该是每位程序员的第二本学习C语言的书。这里所提到的绝大多数教 程、提示利技巧都是无法在其他书上找到的,即使有的话,它们通常也是作为心得休会手T 记录在手册的书页空白处或旧打印纸的背面。作者以及Sun公司编译器和操作系统小组的同 事们在多年C语言编程实践中,积累了大量的知识和经验。书中讲述了许多有趣的C语言故 事和轶闻,诸如连接到大特网上的自动售货机、太空软件中存在的问题,以及一个C语言的 缺陷怎样使整个AT&T长途电话网络瘫痪等。本书的最后一章是C++语言的轻松教程,帮助 你精通这门日益流行的从C语言演化而米的语言 木书讲述的是应用丁PC和UNX系统上的ANSI标准C语言。对C语言中与UNX半 台复杂的硬件结构(如虚拟内存等)相关的特性作了详细描述。对于PC的内存模型和 Intel 8086系列对C语言产生影响的部分也作了全面介绍。C语言基础相当扎实的人很快就会发现 书屮充满了很多程序员可能需要多年实践才能领会的技巧、提示和捷径。它覆盖了许多令C 程序员困惑的主题 o typedef struct bar: int bar;}bar的真正意思是什么? ●我怎样把一些大小不同的多维数组传递到同个函数中? ●为什么 extern chau*p;同另一个文件的 char pl00:能够匹麟? ●什么是总线错误( bus error)?什么是段违规( segmentation violation ●char*foo{]和chan(*foo)有何不同? 如果你对这些问题不是很有把握,很想知道C语言专家是如何处理它们的,那么请继续 C专家编程 岚读!即使你对这些问题经了如指掌,对C语言的其他细节也是耳熟能详,那么也请阅读 本书,继续允灾你的知识。如果觉得不好意思,就告诉书店职员“我是为朋友买书。 Peter Van Der Linden于加州硅谷 前 彦 的,: C代码。C代码运行。运行码运行…请 Barbara ling 所有的C程序都做同一件事,观察一个字符,然后啥也不千。 Peter we b inberger 你是否注意到市面上存字有大量的C语言编程书籍,它们的书名具有一定的启示性,如: C Traps and Pitfall本书中文版《C陷阱与缺陷》由人民邮电出版社出版, The c puzzle book, Obfuscated c and Ocher Mysteries,而其他的编程语言好像没有这类书。这里有一个很充分的 理由! C语言编桯是一项技艺,需要多年历练才能达到较为完善的境界。一个头脑敏捷约人很 快就能学会C语言中基础的东西。但要品味出C语言的细微之处,并通过大量编写各种不同 程序成为C语言专家,则耗时甚巨。打个比方说,这是在巴黎点一杯咖啡与在地铁里告诉土 生:长的巴黎人该在哪里下车之间的差别。本书是一本关于 ANSI C编程语言的高级读本 它适用于已经编写过C程序的人,以及那些想迅速获取一些专家观点和技巧的人 编程专家在多年的实践中建立了自己的技术具箱,里面是形形色色的习惯用法、代码 片段和灵活掌握的技巧。他们站在其他更有经验的同事的肩膀上,或是直接领悟他们的代码, 或是在维护其他人的代码时聆听他们的教诲,随着时闻的推移,逐步形成了这些东西。另外 种成为C编程高手的途径是自省,在认识错误的过程中进步。几乎每个C语言编程新于都 曾犯过下面这样的书写错 if 确的应该是: i(i== C专家编程 且有过这样的经历,这种痛苦的错误(需要进行比较时误用∫赋值符号〉…“般不公再 犯。有些程序员甚至养成一种习惯,在:比较式中先写常数,如:f(3==i)。这样,如果不 小心误用了赋值符号,编译器就会发出"“ attempted assignment to literal(试图向常数赋值 的错误信息。虽然当你比较两个变量吋,这种技巧起不了作用。但是,积少成多,如米你 直留心这些小技巧,迟早会对你有所帮助的 价值2000)美元的Bug 1993年春天,在 Suns操作系统开发小组里,我们接到了一个“一级优先”的Bug 报告,是一个关于异步IO库的问题。如果这个Bug不解决,将会使一桩价值2000万美元的 硬件产品生意告吹,因为对方需要使用这个库的功能。所以,我们顶着重压寻找这个Bug 经过儿次紧张的调试,问匙被圈定在下面这条语句上 这是个打字错误,它的原意是一条赋值语句。程序员的手指放在“=”键上,不小心多按 了一下。这条语句成了将x与2进行比较,比较结果是true或者 false,然后丢弃这个比较结果 ¢语言的表达能力也实在是强,编译器对于“求…个表达式的值,但不使州该值”这样 的语句竟然也能接受,并不发出任何警告,只是简单地把返结果丢弃。我们不知道是应 该为及时找到这个问题的好运气而庆幸,还是应该为这样一个常见的打字错误可能付出昂 的代价而痛心疾首。有些版本的长整数程序口经能够检测到这类问题,但人们很容易忽视这 些有用的工具。 木书收集了其他许多有益的故事。它记录了许多经验丰富的程序员的智慧,避免读者再 走弯路,当你来到一个看上去很熟的地方,却发现许多角落依然陌生,本书就像是一个细心 的向导,帮助你探索这些角落。本书对一些主要话题如声明、数组/指针等作了深入的讨论 同时提供了许多提示和记忆方法。本书从头到尾都采用了 ANSI C的术语,在必要时我会用 日常用语来诠释。 w的"M 编程挑战 小启发 样例框 前 我们设置了“编程挑战”这个小栏目,像这样以框的形式岀现。 框中会列出一些对你所编写的程序的建议 另外,我们还设置了“小启发”这个栏目、也是以框的形式出现的 “小启发”里出现的是在实际工作中所产生一些想法、经验和指导方针。你可以在编程 中应用它们、当然,如果你觉得你已经有了更好的指导原则,也完全可以不理会它们 约定 我们所采用的一个约定是用蔬菜和水果的名字米代表变量的名(当然只适川于小型程 厅片段,现实中的程序不可如此) lar pear[4C1 doule peach; nt mango lora elon =2001 这样就很容易区分哪些是关键字,哪些是程序员所提供的变量名。有些人或许会说,你 不能拿苹果和桔子作比较。但为什么不行呢?它们都是在树上生长、拳头大小、圆圆的可食 之物。一口你习惯了这种州法,你就会发现它很有用。另外还有一个约定,有时我们会重复 某个要点,以示强调。 和精美食谱一样,《C专家编程》准备了许多可口的东西,以实例的样式奉献给读者。每 章都被分成几个彼此相关而又独立的小节。无论是从头到尾认真阅读,还是随意翻开一章 选一个单独的主题细细晶味,都是相当容易的。许多技术细节都蕴藏于C语言在实际编程中 的一些真实故事用。幽默对于学习新东西是相当重要的,所以我在每一章都以一个“轻松 下”的小栏目结尾。这个栏日包含了一个有趣的C语言故事,或是段软件轶闻,让读者在 学习的过程中轻松一下 读者可以把本书当作语言编程的思路集锦,或是C语言提示和丬惯用法的集合,也可 以从经验丰富的编译器作者那里汲取营养,更铚松地学习 ANSIC。总之,它把所有的信息、 提示和指导方针都放在个地方,让你慢慢品味。所以,请赶紧翻开书,拿出笔,舒舒服服 在坐在电脑前,开始快乐之旅吧! 轻松下优化立件系统 偶尔,在C和UNIX中,有些方面是令人感觉相当轻松的。只要出发点合理,什么样的 奇思妙想都不为过。 IBMMotorolay/ Apple powerPC架构具有一种EEL.O指令1,代表“ Enforce 可能是山一个名叫 McDonald的老衣设计的。 C专家编程 In-Order execution of i/O”(在ⅠO中实行按顺序执行的方针)。与这种思想相类似,在UNIX 中也有一条称作 tenets的命令,高级系统管理员用它修改文件系统的动态参数,并优化磁盘 中文件块的布局。 和其他的 Berkeley命令一样,在早期的 tuners在线手册上,也是以个标题为“Bugs 的小节来结尾。内容如下: Bugs: 这个桯序本来应该在垵装妤的( mounted)和活动的文件系统上运行,但事实上并非 如此。因为超级块( superblock)并不是保持在高速缓冲区中,所以该程序只有当它运行 在未安装好的( dismounted)文件系统中时才有效。如果运行于根文件系统,系统必须重 新启动。 你可以优化一个文件系统,但不能优化一条鱼 更有甚者,在文字处理器的源文件中有一条关于它的注释,作任何人不得忽视上面这 段话!内容如下 如果忽视这段话,你就等着烦吧。一个UNIX里的怪物会不断地纠缠你,直到你受不了 为止。 SUN和其他一些公司转到Svr4UNIX平台时,我们就看不到这条悠训了。在SVr4 的手册中没有了“Bugs”这一节,而是改名为“注意”(会不会误导大家?)。“优化一条 鱼”这样的妙语也不见了。作出这个修改的人现在一定在受UNIX里面怪物的纠缠,臼作 自受! 编程挑战 只,M“和N神丹阳知思和B6HMM占巾↓v1h, 计算机日期 关于time_t,什么时候它会到达尽头,重新回到开始呢 写一个程序,找出答案 1.查看一下imet的定义,它位于文件/ aser/include/imeh中 2.编写代码,在一个类型为ime_t的变量中存放 time t的最大值,然后把它传递给 ctime( 函数,转换成ASCI字符串并打印出来。注意 ctime(O函数同C语言并没有任何关系,它只表 “转换时间”。 如果程序设计者去掉了程序的注释,那么多少年以后,他不得不担心该程序会在UNIX 平台上溢出。请修改程序,找出答案。 加州人学伯克利分校,UNX系统的许多版本都是在那里设计的。 译者注 前 1.调用 timeo获得当前的时间。 2.调用 difftimeo获得当前时间和 time t所能表示的最大时间值之间的差值(以秒计算 3.把这个值格式化为年、月、周、日、小时、分钟的形式,并打印出来 它是不是比一般人的寿命还要长 七飞Pw海u∵做 解决方案 3的心你沐w订水3产地如小 计算机日期 这个练习的结果在不同的PC和UNX系统上有所差异,而且它依赖于 time t的存储形 式。在Sun的系统中,time;t是long的 typedef形式。我们所尝试的第一个解决方案如下 #inc1 ude stdio,上> #⊥nClu(e<time,h> Int maln i b⊥ guest=0x7 FFFFFFF print f(“ biggest=影Sn", ctime( bi ggest)}; return v 这是一个输出结果 biggest =Mor Jan 18 19: 14: 0 38 显然,这不是正确的结果。 ctime(函数把参数转换为当地时间,它跟世界统一时间UTC (格林尼治时间)并不一致,取决于你所在的时区。本书写作地是加利福尼亚,比伦敦晚8 个小时,而且现在的年份跟最大时间值的年份相差甚远。 事实上,我们应该采用 mtime函数来取得最大的UTC时间值,这个函数并不返回一个 可打印的宇符串,所以不得不用 asctime函数来获取一个这样的字符串。权衡各方面情况后 修订过的程序如下: #includestdio. h> nclude<time. h int main[ timet biggest Ox7FFFFFFF; printf("biggest =%s n", asctime(gmtime(&biggest)) return 0: 它给出了如下的结果

...展开详情
试读 127P c专家编程.pdf
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
readlove1 不是经典,我不回复!
2015-11-23
回复
ningyuansu 还不错,补充了很多我的欠缺的知识点。
2015-09-23
回复
wanglscool 不错。适合初学者
2015-07-19
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
c专家编程.pdf 35积分/C币 立即下载
1/127
c专家编程.pdf第1页
c专家编程.pdf第2页
c专家编程.pdf第3页
c专家编程.pdf第4页
c专家编程.pdf第5页
c专家编程.pdf第6页
c专家编程.pdf第7页
c专家编程.pdf第8页
c专家编程.pdf第9页
c专家编程.pdf第10页
c专家编程.pdf第11页
c专家编程.pdf第12页
c专家编程.pdf第13页
c专家编程.pdf第14页
c专家编程.pdf第15页
c专家编程.pdf第16页
c专家编程.pdf第17页
c专家编程.pdf第18页
c专家编程.pdf第19页
c专家编程.pdf第20页

试读结束, 可继续阅读

35积分/C币 立即下载