
本书沿用了Deitel特色的“程序实况解说”,深入探讨了C语言和C标准库。通过完整的语法着色、代码高亮、代码演练和程序输出,全面地介绍了测试程序的概念。本书汇集约5000行C代码和数百个开发技巧,将帮助你构建强大的应用程序。本书的内容包括构建自定义数据结构、标准库等;并选择了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
目录 前言 1 Introduction 1.1 Introduction 1.2 The C Programming Language 1.3 C Standard Library 1.4 C++ and Other C-Based Languages 1.5 Typical C Program Development Environment 1.5.1 Phase 1: Creating a Program 1.5.2 Phases 2 and 3: Preprocessing and Compiling a C Program 1.5.3 Phase 4: Linking 1.5.4 Phase 5: Loading 1.5.5 Phase 6: Execution 1.5.6 Standard Input, Standard Output and Standard Error Streams 1.6 Test-Driving a C Application in Windows, Linux and Mac OS X 1.6.1 Running a C Application from the Windows Command Prompt 1.6.2 Running a C Application Using GNU C with Linux 1.6.3 Running a C Application Using GNU C with Mac OS X 1.7 Operating Systems 1.7.1 Windows—A Proprietary Operating System 1.7.2 Linux—An Open-Source Operating System 1.7.3 Apple’s Mac OS X; Apple’s iOS ? for iPhone ? , iPad ? and iPod Touch ? Devices 1.7.4 Google’s Android 2 Introduction to C Programming 2.1 Introduction 2.2 A Simple C Program: Printing a Line of Text 2.3 Another Simple C Program: Adding Two Integers 2.4 Arithmetic in C 2.5 Decision Making: Equality and Relational Operators 2.6 Secure C Programming 3 Control Statements: Part I 3.1 Introduction 3.2 Control Structures 3.3 The if Selection Statement 3.4 The if … else Selection Statement 3.5 The while Repetition Statement 3.6 Class Average with Counter-Controlled Repetition 3.7 Class Average with Sentinel-Controlled Repetition 3.8 Nested Control Statements 3.9 Assignment Operators 3.10 Increment and Decrement Operators 3.11 Secure C Programming 4 Control Statements: Part II 4.1 Introduction 4.2 Repetition Essentials 4.3 Counter-Controlled Repetition 4.4 for Repetition Statement 4.5 for Statement: Notes and Observations 4.6 Examples Using the for Statement 4.7 switch Multiple-Selection Statement 4.8 do … while Repetition Statement 4.9 break and continue Statements 4.10 Logical Operators 4.11 Confusing Equality ( == ) and Assignment ( = ) Operators 4.12 Secure C Programming 5 Functions 5.1 Introduction 5.2 Program Modules in C 5.3 Math Library Functions 5.4 Functions 5.5 Function Definitions 5.6 Function Prototypes: A Deeper Look 5.7 Function Call Stack and Stack Frames 5.8 Headers 5.9 Passing Arguments By Value and By Reference 5.10 Random Number Generation 5.11 Example: A Game of Chance 5.12 Storage Classes 5.13 Scope Rules 5.14 Recursion 5.15 Example Using Recursion: Fibonacci Series 5.16 Recursion vs. Iteration 5.17 Secure C Programming 6 Arrays 6.1 Introduction 6.2 Arrays 6.3 Defining Arrays 6.4 Array Examples 6.5 Passing Arrays to Functions 6.6 Sorting Arrays 6.7 Case Study: Computing Mean, Median and Mode Using Arrays 6.8 Searching Arrays 6.9 Multidimensional Arrays 6.10 Variable-Length Arrays 6.11 Secure C Programming 7 Pointers 7.1 Introduction 7.2 Pointer Variable Definitions and Initialization 7.3 Pointer Operators 7.4 Passing Arguments to Functions by Reference 7.5 Using the const Qualifier with Pointers 7.5.1 Converting a String to Uppercase Using a Non-Constant Pointer to Non-Constant Data 7.5.2 Printing a String One Character at a Time Using a Non-Constant Pointer to Constant Data 7.5.3 Attempting to Modify a Constant Pointer to Non-Constant Data 7.5.4 Attempting to Modify a Constant Pointer to Constant Data 7.6 Bubble Sort Using Pass-by-Reference 7.7 sizeof Operator 7.8 Pointer Expressions and Pointer Arithmetic 7.9 Relationship between Pointers and Arrays 7.10 Arrays of Pointers 7.11 Case Study: Card Shuffling and Dealing Simulation 7.12 Pointers to Functions 7.13 Secure C Programming 8 Characters and Strings 8.1 Introduction 8.2 Fundamentals of Strings and Characters 8.3 Character-Handling Library 8.3.1 Functions isdigit , isalpha , isalnum and isxdigit 8.3.2 Functions islower , isupper , tolower and toupper 8.3.3 Functions isspace , iscntrl , ispunct , isprint and isgraph 8.4 String-Conversion Functions 8.4.1 Function strtod 8.4.2 Function strtol 8.4.3 Function strtoul 8.5 Standard Input/Output Library Functions 8.5.1 Functions fgets and putchar 8.5.2 Function getchar 8.5.3 Function sprintf 8.5.4 Function sscanf 8.6 String-Manipulation Functions of the String-Handling Library 8.6.1 Functions strcpy and strncpy 8.6.2 Functions strcat and strncat 8.7 Comparison Functions of the String-Handling Library 8.8 Search Functions of the String-Handling Library 8.8.1 Function strchr 8.8.2 Function strcspn 8.8.3 Function strpbrk 8.8.4 Function strrchr 8.8.5 Function strspn 8.8.6 Function strstr 8.8.7 Function strtok 8.9 Memory Functions of the String-Handling Library 8.9.1 Function memcpy 8.9.2 Function memmove 8.9.3 Function memcmp 8.9.4 Function memchr 8.9.5 Function memset 8.10 Other Functions of the String-Handling Library 8.10.1 Function strerror 8.10.2 Function strlen 8.11 Secure C Programming 9 Formatted Input/Output 9.1 Introduction 9.2 Streams 9.3 Formatting Output with printf 9.4 Printing Integers 9.5 Printing Floating-Point Numbers 9.6 Printing Strings and Characters 9.7 Other Conversion Specifiers 9.8 Printing with Field Widths and Precision 9.9 Using Flags in the printf Format Control String 9.10 Printing Literals and Escape Sequences 9.11 Reading Formatted Input with scanf 9.12 Secure C Programming 10 Structures, Unions, Bit Manipulation and Enumerations 10.1 Introduction 10.2 Structure Definitions 10.2.1 Self-Referential Structures 10.2.2 Defining Variables of Structure Types 10.2.3 Structure Tag Names 10.2.4 Operations That Can Be Performed on Structures 10.3 Initializing Structures 10.4 Accessing Structure Members 10.5 Using Structures with Functions 10.6 typedef 10.7 Example: High-Performance Card Shuffling and Dealing Simulation 10.8 Unions 10.8.1 Union Declarations 10.8.2 Operations That Can Be Performed on Unions 10.8.3 Initializing Unions in Declarations 10.8.4 Demonstrating Unions 10.9 Bitwise Operators 10.9.1 Displaying an Unsigned Integer in Bits 10.9.2 Making Function displayBits More Scalable and Portable 10.9.3 Using the Bitwise AND, Inclusive OR, Exclusive OR and Complement Operators 10.9.4 Using the Bitwise Left- and Right-Shift Operators 10.9.5 Bitwise Assignment Operators 10.10 Bit Fields 10.11 Enumeration Constants 10.12 Secure C Programming 11 File Processing 11.1 Introduction 11.2 Files and Streams 11.3 Creating a Sequential-Access File 11.4 Reading Data from a Sequential-Access File 11.5 Random-Access Files 11.6 Creating a Random-Access File 11.7 Writing Data Randomly to a Random-Access File 11.8 Reading Data from a Random-Access File 11.9 Case Study: Transaction-Processing Program 11.10 Secure C Programming 12 Data Structures 12.1 Introduction 12.2 Self-Referential Structures 12.3 Dynamic Memory Allocation 12.4 Linked Lists 12.4.1 Function insert 12.4.2 Function delete 12.4.3 Function printList 12.5 Stacks 12.5.1 Function push 12.5.2 Function pop 12.5.3 Applications of Stacks 12.6 Queues 12.6.1 Function enqueue 12.6.2 Function dequeue 12.7 Trees 12.7.1 Function insertNode 12.7.2 Traversals: Functions inOrder , preOrder and postOrder 12.7.3 Duplicate Elimination 12.7.4 Binary Tree Search 12.8 Secure C Programming 13 Preprocessor 13.1 Introduction 13.2 #include Preprocessor Directive 13.3 #define Preprocessor Directive: Symbolic Constants 13.4 #define Preprocessor Directive: Macros 13.5 Conditional Compilation 13.6 #error and #pragma Preprocessor Directives 13.7 # and ## Operators 13.8 Line Numbers 13.9 Predefined Symbolic Constants 13.10 Assertions 13.11 Secure C Programming 14 Other Topics 14.1 Introduction 14.2 Redirecting I/O 14.3 Variable-Length Argument Lists 14.4 Using Command-Line Arguments 14.5 Notes on Compiling Multiple-Source-File Programs 14.6 Program Termination with exit and atexit 14.7 Suffixes for Integer and Floating-Point Literals 14.8 Signal Handling 14.9 Dynamic Memory Allocation: Functions calloc and realloc 14.10 Unconditional Branching with goto A Operator Precedence Chart B ASCII Character Set C Number Systems C.1 Introduction C.2 Abbreviating Binary Numbers as Octal and Hexadecimal Numbers C.3 Converting Octal and Hexadecimal Numbers to Binary Numbers C.4 Converting from Binary, Octal or Hexadecimal to Decimal C.5 Converting from Decimal to Binary, Octal or Hexadecimal C.6 Negative Binary Numbers: Two’s Complement Notation D Sorting: A Deeper Look D.1 Introduction D.2 Big O Notation D.3 Selection Sort D.4 Insertion Sort D.5 Merge Sort E Additional Features of the C Standard E.1 Introduction E.2 Support for C99 E.3 C99 Headers E.4 Mixing Declarations and Executable Code E.5 Declaring a Variable in a for Statement Header E.6 Designated Initializers and Compound Literals E.7 Type bool E.8 Implicit int in Function Declarations E.9 Complex Numbers E.10 Variable-Length Arrays E.11 Additions to the Preprocessor E.12 Other C99 Features E.12.1 Compiler Minimum Resource Limits E.12.2 The restrict Keyword E.12.3 Reliable Integer Division E.12.4 Flexible Array Members E.12.5 Relaxed Constraints on Aggregate Initialization E.12.6 Type Generic Math E.12.7 Inline Functions E.12.8 return Without Expression E.12.9 __func__ Predefined Identifier E.12.10 va_copy Macro E.13 New Features in the C11 Standard E.13.1 New C11 Headers E.13.2 Multithreading Support E.13.3 quick_exit function E.13.4 Unicode ? Support E.13.5 _Noreturn Function Specifier E.13.6 Type-Generic Expressions E.13.7 Annex L: Analyzability and Undefined Behavior E.13.8 Anonymous Structures and Unions E.13.9 Memory Alignment Control E.13.10 Static Assertions E.13.11 Floating Point Types E.14 Web Resources F Using the Visual Studio Debugger F.1 Introduction F.2 Breakpoints and the Continue Command F.3 Locals and Watch Windows F.4 Controlling Execution Using the Step Into , Step Over , Step Out and Continue Commands F.5 Autos Window G Using the GNU Debugger G.1 Introduction G.2 Breakpoints and the run , stop , continue and print Commands G.3 print and set Commands G.4 Controlling Execution Using the step , finish and next Commands G.5 watch Command Index
Paul Deitel,Deitel & Associates有限公司的CEO兼CTO,毕业于麻省理工学院,主修信息技术。通过Deitel & Associate有限公司,他已经为行业、政府机关和军队客户提供了数百节编程课程,这些客户包括思科、IBM、西门子、Sun Microsystems、戴尔、Fidelity、肯尼迪航天中心、美国国家强风暴实验室、白沙导弹试验场、Rogue Wave Software、波音公司、SunGard Higher Education、北电网络公司、彪马、iRobot、Invensys等。他和本书的合著者Harvey M. Deitel博士是全球畅销编程语言教材/专业书籍/视频的作者。__eol__Harvey Deitel博士,Deitel & Associates有限公司的董事长和首席战略官,在计算机领域中拥有50多年的经验。Deitel博士获得了麻省理工学院电子工程(学习计算)的学士和硕士学位,并获得了波士顿大学的数学博士学位(学习计算机科学)。他拥有丰富的行业和大学教学经验,在1991年与儿子Paul Deitel创办Deitel & Associates有限公司之前,他是波士顿大学计算机科学系的主任并获得了终身任职权。Deitel博士为很多大公司、学术研究机构、政府机关和军方提供了数百场专业编程讲座。Deitel的出版物获得了国际上的认可,并被翻译为繁体中文、简体中文、韩语、日语、德语、俄语、西班牙语、法语、波兰语、意大利语、葡萄牙语、希腊语、乌尔都语和土耳其语。__eol__