编辑推荐

  《C专家编程》可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言基础的程序员,《C专家编程》可以帮助他们站在C的高度了解和学习C++。书本撷取了几十个实例,细致、深入地讲解了C的历史、语言特性、声明、数组、指针、链接、运行时、内存以及分析了如何进一步学习C++等问题。《C专家编程》是一本ANSIC编程语言的高级读本。它适用于已经编写过C程序的人,以及那些想迅速获取一些专家观点和技巧的人。
  专家级的C编程指南展示C程序员的编程技巧。
  即使你读过AndyKoneig的《C陷阱与缺陷》,你还是应该看看PeterVanDerLinden的书。我想,他们两人的书称都应该千方百计的搞到,如获至宝地捧读。如果我是你的上司,这是必须的要求。

内容简介

  《C和C++经典著作C专家编程ExpertCProgrammingDeepCSecrets》展示了C程序员所使用的编码技巧,并专门开辟了一章对C++的基础知识进行了介绍。书中C的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习C++等问题进行了细致的讲解和深入的分析。《C和C++经典著作:C专家编程Expert C Programming Deep C Secrets》撷取几十个实例进行讲解,对C程序员具有非常高的实用价值。《C和C++经典著作?C专家编程ExpertCProgrammingDeepCSecrets》可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言基础的程序员,《C和C++经典著作C专家编程ExpertCProgrammingDeepCSecrets》可以帮助他们站在C的高度了解和学习C++。

目录

第1章C:穿越时空的迷雾
1.1C语言的史前阶段
1.2C语言的早期体验
1.3标准I/O库和C预处理器
1.4K&RC
1.5今日之ANSIC
1.6它很棒,但它符合标准吗
1.7编译限制
1.8ANSIC标准的结构
1.9阅读ANSIC标准,寻找乐趣和裨益
1.10“安静的改变”究竟有多少安静
1.11轻松一下——由编译器定义的Pragmas效果

第2章这不是Bug,而是语言特性
2.1这关语言特性何事,在Fortran里这就是Bug呀
2.2多做之过
2.3误做之过
2.4少做之过
2.5轻松一下——有些特性确实就是Bug
2.6参考文献

第3章分析C语言的声明
3.1只有编译器才会喜欢的语法
3.2声明是如何形成的
3.3优先级规则
3.4通过图表分析C语言的声明
3.5typedef可以成为你的朋友
3.6typedefintx[10]和#definexint[10]的区别
3.7typedefstructfoo{...foo;}的含义
3.8理解所有分析过程的代码段
3.9轻松一下——驱动物理实体的软件

第4章令人震惊的事实:数组和指针并不相同
4.1数组并非指针
4.2我的代码为什么无法运行
4.3什么是声明,什么是定义
4.4使声明与定义相匹配
4.5数组和指针的其他区别
4.6轻松一下——回文的乐趣

第5章对链接的思考
5.1函数库、链接和载入
5.2动态链接的优点
5.3函数库链接的5个特殊秘密
5.4警惕Interpositioning
5.5产生链接器报告文件
5.6轻松一下——看看谁在说话:挑战Turing测验

第6章运动的诗章:运行时数据结构
6.1a.out及其传说
6.2段
6.3操作系统在a.out文件里干了些什么
6.4C语言运行时系统在a.out里干了些什么
6.5当函数被调用时发生了什么:过程活动记录
6.6auto和static关键字
6.7控制线程
6.8setjmp和longjmp
6.9UNIX中的堆栈段
6.10MS-DOS中的堆栈段
6.11有用的C语言工具
6.12轻松一下——卡耐基-梅隆大学的编程难题
6.13只适用于高级学员阅读的材料

第7章对内存的思考
7.1Intel80x86系列
7.2Intel80x86内存模型以及它的工作原理
7.3虚拟内存
7.4Cache存储器
7.5数据段和堆
7.6内存泄漏
7.7总线错误
7.8轻松一下——“ThingKing”和“页面游戏”

第8章为什么程序员无法分清万圣节和圣诞节
8.1Portzebie度量衡系统
8.2根据位模式构筑图形
8.3在等待时类型发生了变化
8.4原型之痛
8.5原型在什么地方会失败
8.6不需要按回车键就能得到一个字符
8.7用C语言实现有限状态机
8.8软件比硬件更困难
8.9如何进行强制类型转换,为何要进行类型强制转换
8.10轻松一下——国际C语言混乱代码大赛

第9章再论数组
9.1什么时候数组与指针相同
9.2为什么会发生混淆
9.3为什么C语言把数组形参当作指针
9.4数组片段的下标
9.5数组和指针可交换性的总结
9.6C语言的多维数组
9.7轻松一下——软件/硬件平衡

第10章再论指针
10.1多维数组的内存布局
10.2指针数组就是Iliffe向量
10.3在锯齿状数组上使用指针
10.4向函数传递一个一维数组
10.5使用指针向函数传递一个多维数组
10.6使用指针从函数返回一个数组
10.7使用指针创建和使用动态数组
10.8轻松一下——程序检验的限制

第11章你懂得C,所以C++不在话下
11.1初识OOP
11.2抽象——取事物的本质特性
11.3封装——把相关的类型、数据和函数组合在一起
11.4展示一些类——用户定义类型享有和预定义类型一样的权限
11.5访问控制
11.6声明
11.7如何调用成员函数
11.8继承——复用已经定义的操作
11.9多重继承——从两个或更多的基类派生
11.10重载——作用于不同类型的同一操作具有相同的名字
11.11C++如何进行操作符重载
11.12C++的输入/输出(I/O)
11.13多态——运行时绑定
11.14解释
11.15C++如何表现多态
11.16新奇玩意——多态
11.17C++的其他要点
11.18如果我的目标是那里,我不会从这里起步
11.19它或许过于复杂,但却是惟一可行的方案
11.20轻松一下——死亡计算机协会
11.21更多阅读材料

附录A程序员工作面试的秘密
附录B术语表

精彩书摘

C:穿越时空的迷雾
C诡异离奇,缺陷重重,却获得了巨大的成功。
——DennisRitchie
1.1C语言的史前阶段
听上去有些荒谬,C语言的产生竟然源于一个失败的项目。1969年,通用电气、麻省理工学院和贝尔实验室联合创立了一个庞大的项目——Multics工程。该项目的目的是创建一个操作系统,但显然遇到了麻烦:它不但无法交付原先所承诺的快速而便捷的在线系统,甚至连一点有用的东西都没有弄出来。虽然开发小组最终勉强让Multics开动起来,但他们还是陷入了泥淖,就像IBM在OS/360上面一样。他们试图建立一个非常巨大的操作系统,能够应用于规模很小的硬件系统中。Multics成了总结工程教训的宝库,但它同时也为C语言体现“小即是美”铺平了道路。
当心灰意冷的贝尔实验室的专家们撤离Multics工程后,他们又去寻找其他任务。其中一位名叫KenThompson的研究人员对另一个操作系统很感兴趣,他为此好几次向贝尔管理层提议,但均遭否决。在等待官方批准时,Thompson和他的同事DennisRitchie自娱自乐,把Thompson的“太空旅行”软件移植到不太常用的PDP-7系统上。太空旅行软件模拟太阳系的主要星体,把它们显示在图形屏幕上,并创建了一架航天飞机,它能够飞行并降落到各个行星上。与此同时,Thompson加紧工作,为PDP-7编写了一个简易的新型操作系统。它比Multics简单得多,也轻便得多。整个系统都是用汇编语言编写的。BrianKemighan在1970年给它取名为UNIX,自嘲地总结了从Multics中获得的那些不应该做的教训。图1—1描述了早期C、UNIX和相关硬件系统的关系。
是先有C语言还是先有UNIX呢?说起这个问题,人们很容易陷入先有鸡还是先有蛋的套套中。确切地说,UNIX比C语言出现得早(这也是为什么UNIX的系统时间是从1970年1月1日起按秒计算的,它就是那时候产生的啊)。然而,我们这里讨论的不是家禽趣闻,而是编程故事。用汇编语言编写UNIX显得很笨拙,在编制数据结构时浪费了大量的时间,而且系统难以调试,理解起来也很困难。Thompson想利用高级语言的一些优点,但又不想像PL/I那样效率低下,也不想碰见在Multics中曾遇到过的复杂问题。在用Fortran进行了一番简短而又不成功的尝试之后,Thompson创建了B语言,他把用于研究的语言BCPL作了简化,使B的解释器能常驻于PDP-7只有8KB大小的内存中。B语言从来不曾真正成功过,因为硬件系统的内存限制,它只允许放置解释器,而不是编译器,由此产生的低效阻碍了使用B语言进行UNIX自身的系统编程。

其他推荐