本书沿用了Deitel特色的“程序实况解说”,深入探讨了C语言和C标准库。通过完整的语法着色、代码高亮、代码演练和程序输出,全面地介绍了测试程序的概念。本书汇集约5000行C代码和数百个开发技巧,将帮助你构建强大的应用程序。本书的内容包括构建自定义数据结构、标准库等;并选择了C11标准的一些新特性,如多线程来帮助你为目前的多核系统编写高性能的应用程序;C语言安全编程部分展示了如何让你编写的程序具有更好的鲁棒性,不易受到攻击。
本书适合具有一定高级语言编程背景的程序员阅读。
以实用的、示例丰富的形式讲述:
C语言编程基础知识
如何使用GNU gcc和gdb,以及如何Visual C++进行编译调试
C11标准的关键特性:泛型表达式,匿名结构与联合,内存对齐,_Static_assert、quick_exit和at_quick_exit,增强了对Unicode的支持,对Noreturn的功能说明,以及C11 headers
C11多线程性能增强
C语言安全编程部分
数据结构、搜索和排序
评价问题顺序、预处理器
指定初始值、复合文字、布尔型、复数、可变长度的数组、指针类型的限制、泛型、内联函数……
前言
欢迎大家和我一起学习C语言。本书会向软件开发专业人员介绍最先进的计算技术。
本书沿用了Deitel特色的“程序实况解说”风格,我们会用完整的可用性程序(而不是代码片段)来解释相关概念。每个代码示例后都跟着一个或者多个样例。请在线阅读“Before You Begin”的内容(http://www.deitel.com/bookresources/cfp/cfp_byb.pdf),并据此设置自己的电脑,以便顺畅地运行这130个代码示例和你自己的C程序。所有的源代码都可以从www.deitel.com/books/cfp和www.pearsonhighered.com/deitel下载。当学习这些程序时,请使用提供的源代码来运行它们。
本书在详细介绍C语言的同时,会兼顾挑战性和趣味性。如果有任何问题,都可以发送邮件到deitel@deitel.com,我们会及时回复。要了解本书的最新信息,可以访问www.deitel.com/books/cfp,或加入Facebook社区(www.deitel.com/deitelfan)、Twitter社区(@deitel)、Google+社区(gplus.to/deitel)和LinkedIn社区(bit.ly/deitelLinkedIn)。此外,你还可以订阅Deitel Buzz Online电子邮件新闻简报(www.deitel.com/newsletter/subscribe.html)来了解更多相关内容。
本书特色
本书的主要特色如下:
?覆盖C语言新标准。本书是针对2011年批准的C语言新标准编写的,该标准通常被称为C11或者被简单地称为“C标准”。不同编译器对新标准的支持有所不同。我们的大多数读者会选择使用GNU gcc编译器(支持新标准中的很多关键特性)或者微软的Visual C++编译器。微软只支持被添加到C99和C11中的一小部分C特性——主要是C++标准中也需要的那些特性。为了适应所有的读者,我们将新标准特性的讨论放在易于使用的相关章节,以及附录E“C语言新标准的附加特性”中。我们还用由C语言新标准引起的首选版本取代了过时的功能。
?C语言安全编程。我们在很多C语言编程章节中都添加了关于C语言安全编程的注意事项。我们还在www.deitel.com/SecureC/上发布了C语言安全编程资源中心。要了解更多细节,请参见下面的“C语言安全编程注意事项”的相关内容。
?专注于性能问题。C语言经常受到性能密集型应用程序(例如,操作系统、实时系统、嵌入式系统和通信系统)设计师的青睐,因此,我们会密切关注性能问题。
?所有的代码都在Windows和Linux下进行了测试。我们分别使用Visual C++(Windows)和GNU gcc(Linux)对每个示例代码进行了测试。
?更深入地研究了排序。排序是一个很有趣的问题,因为虽然不同的排序算法最终会得到相同的结果,但它们的内存消耗、占用CPU的时间和其他系统资源完全不同——算法性能至关重要。我们在第6章开始介绍排序,并且在附录D中对其进行了更深入的探讨。我们考虑了几种算法,并从它们的内存消耗和对处理器的要求方面进行了比较。为此,我们引入了大O表示法,它用于表示使用算法解决问题的困难程度。我们在附录D讨论了选择排序、插入排序和递归归并排序。
?调试器附录。本书中包含了Visual Studio和GNU gdb调试附录。
?运算顺序。本书讨论了运算顺序问题,来帮助你避免错误。
?C++风格的//注释。我们使用的是较新的、更简洁的C++风格//注释,而不是老式的C风格/*...*/注释。
?C标准库。我们在1.3节引用了en.cppreference.com/w/c,在这里你可以找到C标准库函数的详细可搜索文件。
C语言安全编程注意事项
经验表明,人们很难创建出可以抵抗病毒、蠕虫等攻击的具有工业强度的系统。如今,通过互联网,这类攻击瞬间就可以对全球范围造成影响,而这些软件漏洞往往来自很容易避免的编程问题。从开发周期的开始就将安全性考虑进来,可以大大减少开发的成本和漏洞。
人们创建了CERT Coordination Center(www.cert.org)来分析和及时应对攻击。CERT(计算机安全应急响应组,Computer Emergency Response Team)标准会被发布和推广,以帮助C语言程序员和其他人实现具有工业强度系统的安全编码标准,这样就可以避免造成开放式系统受到攻击的编程实践。CERT标准将随着新出现的安全问题而不断演变。
我们的代码符合书籍水平的CERT建议。如果你要创建在工业上应用的C语言系统,可以考虑阅读Robert Seacord的《C安全编码标准》(Addison-Wesley Professional,2009)、《C和C++安全编码》(Addison-Wesley Professional,2013),读者可以在www.securecoding.cert.org上免费在线阅读CERT指南。本书的技术评审Seacord也为新的C语言安全编程部分提供了具体的建议。Seacord先生是卡内基梅隆大学软件工程研究所(SEI)CERT的安全编程管理员,他还是卡内基梅隆大学计算机科学系的副教授。
我们在第2章~第13章中各章的最后一节Secure C Programming(C语言安全编程)部分讨论了很多重要的主题,包括运算溢出的测试、无符号整数类型的使用、C标准附录K中的新安全函数、检查标准库函数返回的状态信息的重要性、范围检查、安全随机数的生成、数组边界检查、避免缓冲区溢出的技术、输入验证、避免未定义的行为、返回状态信息的函数和未返回状态信息的类似函数的选择、确保指针总是NULL或者包含有效地址、预处理宏的首选C函数等。
教学方法
本书包含丰富的示例。我们将专注于良好的软件工程并强调程序的清晰性。
语法着色。为了增加可读性,我们为代码添加了语法阴影,这与大多数IDE和代码编辑器给代码的语法添加颜色是类似的。我们采用的语法着色约定是:
注释用常规字体表示。
关键字用粗字体表示。
常量和字面值用比关键字稍浅一点的黑体字来表示。
所有的其他代码用黑体表示。
代码高亮显示。我们在每个源代码程序的关键代码段都放置了一个灰色的矩形框。
使用字体突出显示。为了便于参考,我们用粗体表示每个定义性出现的关键概念和索引的页面引用。我们用加粗的Helvetica字体来强调屏幕组件(例如,File菜单)、用Lucida字体来强调C语言程序文本(例如,int x = 5;)。
目标。每章都包含一个Objectives(本章目标)列表。
插图/图。我们在本书中包含了大量的图表、表格、线条图、流程图、程序和程序输出。
编程技巧。我们提供了编程技巧来帮助你关注程序开发的重要方面。这些技巧和实践是我们在8年编程和企业培训经验中积累的精华。最佳编程实践
最佳编程实践让读者关注那些有助于编写更清晰、更易理解和维护的程序的技术。
常见编程错误
指出这些常见的编程错误可以减少读者犯类似错误的可能性。
错误预防技巧
这些技巧包括揭露和删除程序中bug的建议;大多数技巧描述的是如何预防将bug带入C程序中。
性能技巧
这些技巧强调的是如何让程序运行得更快或者尽量减少它们占用的内存。
可移植性技巧
可移植性技巧可以帮助你编写能够在各种平台上运行的代码。
软件工程意见
软件工程意见强调的是影响软件系统(尤其是大型系统)构建的架构和设计问题。
索引。我们在书中包含了大量的索引,它在你将本书当作参考书使用时尤为有用。我们使用加粗的页号来强调关键术语的定义出现的页码。
本书使用的软件
我们在本书中使用的是免费的GNU C编译器(gcc.gnu.org/install/binaries.html),其中大多数Linux系统都已经预先安装了该编译器,它还可以被安装到Mac OS X、Windows系统和用于Windows桌面的免费Visual Studio Express 2012(www.microsoft.com/express)中。Apple的Xcode开发工具中包含LLVM编译器,Mac OS X用户可以从Mac App Store中免费下载。很多其他免费的C编译器都可以在线获取。
C基础:LiveLessons视频培训产品的第I部分和第II部分
“C基础:LiveLessons视频培训产品的第I部分和第II部分”(2013年秋季上线)介绍了开始使用C语言构建健壮的、强大的软件时需要了解的内容。它包含了十多个小时的与本书同步的专家培训视频。要了解关于Deitel LiveLesssons视频产品的更多信息,请访问
www.deitel.com/livelessons
或者通过deitel@deitel.com联系我们。如果你已经订阅了Safari Books Online(www.safaribooksonline.com),你还可以获取我们的LiveLessons视频。
致谢
我们要感谢Abbey Deitel和Barbara Deitel,他们为这个项目投入了大量时间。我们有幸与Prentice Hall/Pearson的出版专家团队共同完成这个项目。我们要感谢培生科技出版集团的主编Mark L. Taub 17年来给我们的指导和为此付出的精力。我们要感谢Carole Snyder出色地完成了管理审稿过程的工作,感谢Chuti Prasertsith为本书设计了具有创造力和精确度的封面,感谢John Fuller出色地完成了我们的Deitel开发人员系列图书的出版工作。
审稿人员
我们要感谢本书审稿人员的付出,他们在严格的最终期限的压力下完成了对本书文本和程序的审查,并为提高本书的表述方式提供了无数建议,他们是:John F. Doyle博士(印第安纳大学东南分校)、Hemanth H.M.(SonicWALL的软件工程师)、Vytautus Leonavivius(微软)、Robert Seacord(SEI/CERT的安全编码管理员、《C安全编码标准》一书的作者、C编程语言国际标准工作组的技术专家)和José Antonio González Seco(西班牙安达卢西亚议会议员)。
C11是一种强大的编程语言,它可以帮助你快速有效地编写高性能程序。你可以很好地在企业系统开发领域中使用C11,来帮助他们建立业务关键型和任务关键型信息系统。我们真诚地欢迎读者提出可以提高本书质量的意见、批评、更正和建议,请将它们发送到:
deitel@deitel.com
本书的勘误放在:
www.deitel.com/books/cfp
我们希望你享受本书的阅读,就像我们编写本书时那样。
Paul Deitel
Harvey Deitel
作者简介
Paul Deitel,Deitel & Associates有限公司的CEO兼CTO,毕业于麻省理工学院,主修信息技术。在Deitel & Associate有限公司公司工作的过程中,他已经为行业、政府机关和军队客户提供了数百节编程课程,这些客户包括思科、IBM、西门子、Sun Microsystems、戴尔、Fidelity、肯尼迪航天中心、美国国家强风暴实验室、白沙导弹试验场、Rogue Wave Software、波音公司、SunGard Higher Education、北电网络公司、彪马、iRobot、Invensys等。他和本书的合著者Harvey M. Deitel博士是全球畅销编程语言教材、专业书籍和视频的作者。
Harvey Deitel博士,Deitel & Associates有限公司的董事长和首席战略官,在计算机领域中拥有50多年的经验。Deitel博士获得了麻省理工学院电子工程(学习计算)的学士和硕士学位,并获得了波士顿大学的数学博士学位(学习计算机科学)。他拥有丰富的行业和大学教学经验,在1991年与儿子Paul Deitel创办Deitel & Associates有限公司之前,他是波士顿大学计算机科学系的主任并获得了终身任职权。Deitel博士为很多大公司、学术研究机构、政府机关和军方提供了数百场专业编程讲座。Deitel的出版物获得了国际上的认可,并被翻译为繁体中文、简体中文、韩语、日语、德语、俄语、西班牙语、法语、波兰语、意大利语、葡萄牙语、希腊语、乌尔都语和土耳其语。
Deitel & Associates有限公司的企业培训
由Paul Deitel和Harvey Deitel创立的Deitel & Associates有限公司是一家国际知名的写作、企业培训和软件开发公司,该公司专注于计算机编程语言、对象技术、Android和iOS应用程序开发,以及Internet和Web软件技术方面的培训和写作。该公司向全球客户提供了由讲师主导的主要编程语言和平台课程,包括C、C++、Visual C++、Java、Visual C#、Visual Basic、XML、Python、对象技术、互联网和Web编程、Android应用程序开发、Objective-C和iOS应用程序开发,并且还在不断提供其他编程语言和软件开发课程。公司的客户包括一些全球最大的公司、政府机关、军队和学术研究机构。
通过与Prentice Hall/Pearson 37年的合作,Deitel & Associates有限公司出版了一流的专业编程书籍、大学教科书和LiveLessons视频课程。读者可以通过以下邮件地址联系Deitel & Associates有限公司和作者:
deitel@deitel.com
要了解更多Deitel Dive-Into?系列企业培训课程的信息,请访问:
www.deitel.com/training
如果贵机构希望获得关于由讲师主导的现场培训的相关建议,可发送邮件到deitel@deitel.com。
只要订阅Safari Books Online,就可以获取本书的电子版本,订阅地址为:
www.safaribooksonline.com
本书的最后一页会告诉你如何获得45天的免费试用期,这样你就可以访问本书的电子版本了。
个人想购买Deitel书籍和LiveLessons视频培训,可以访问www.deitel.com。公司、政府机关、军队和学术研究组织的大宗团购应该直接与Pearson联系。要了解更多信息,请访问:
www.informit.com/store/sales.aspx