首页>参考读物>计算机科学与技术>软件与程序设计

C语言核心技术(原书第2版)
作者 : [德] 彼得?普林茨(Peter Prinz),托尼?克劳福德(Tony Crawford)著
译者 : 袁野 译
出版日期 : 2017-08-09
ISBN : 978-7-111-56220-7
定价 : 139.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 789
开本 : 16
原书名 : C in a Nutshell
原出版社: O'Reilly Media USA
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

待补

图书前言

本书是一本关于C编程语言与C语言链接库的完整参考手册。作为一本阐述核心技术(In a Nutshell)的书,它的目的是在日常工作中为C语言程序员提供方便、可靠的辅助作用。本书介绍了C语言的所有元素,并通过大量的示例展示了这些元素的用法。
最新的C语言规范是2011年发布的C语言国际标准,ISO/IEC 9899:2011,通常称为C11。该标准取代了C99标准(ISO/IEC 9899:1999)及其技术修正,这些修正包括2001年的TC1、2004年的TC2,以及2007年的TC3。第一个C语言国际标准于1990年发布,名为ISO/IEC 9899:1990,它于1995年增补了规范性附录1(ISO/IEC9899/AMD1:1995)。1990年的ISO/IEC标准对应于ANSI标准X3.159,后者于1989年发布,通常称为ANSI C或C89。
并非所有编译器以及标准库实现版本都支持2011年所发布C语言标准的新特性。因此,在本书中,我们会在2011年C语言标准的新特性上标注C11(例如多线程、泛型宏,以及新的标准库函数)。在C99标准所引入的扩展特性上标注C99。
本书不是针对C语言编程的入门书籍。虽然它涵盖了该语言的所有基础,但这些内容并非以教程的形式组织编写。如果你尚未接触过C语言,我们建议你先学习至少一本C语言入门书籍。如果你有其他编程语言的经验,例如Java或C++,也可以直接参考本书。
本书的组织方式
本书分为三部分。第一部分严格按照各项介绍C语言;第二部分介绍标准库;第三部分通过GNU软件集合中广泛使用的工具,介绍程序的编译与测试过程。
第一部分
第一部分包括第1~15章,介绍C语言的基础知识。第1章介绍了C语言的常见概念与元素,在后续几章每章都有一个具体的主题,例如类型、语句、指针等。这些章节主题次序的排列原则是:后一个主题涵盖的内容在之前的主题中已经介绍过(例如,先介绍类型,然后是表达式和运算符,接着是语句,等等),但有时候在阅读当前章节时仍然需要参考后续章节,以了解一些相关的细节。例如,虽然指针与数组的详细介绍在第8章与第9章,但是在第5章中提前讨论指针与数组是十分有必要的(第5章介绍表达式和运算符)。
第1章,C语言基础
介绍C语言的特性,以及如何编写和编译C程序。本章引入了一些基本概念,例如翻译单元、字符集与标识符。
第2章,数据类型
首先综述C语言中的类型,然后介绍了基本类型、void类型与枚举类型。
第3章,字面量
介绍数字常量、字符常量、字符串字面量,包括转义符。
第4章,类型转换
介绍显式与隐式的类型转换,包括整数提升与寻常算术转换。
第5章,表达式和运算符
介绍表达式的计算、所有运算符,以及与运算符对应的操作数。
第6章,语句
介绍C语言的语句,例如语句块、循环,以及跳转。
第7章,函数
介绍函数的定义与函数的调用,包括递归函数与内联函数。
第8章,数组
介绍固定长度数组与长度可变数组,包含字符串、数组初始化,以及多维数组等。
第9章,指针
介绍对象指针与函数指针的定义及使用方法。
第10章,结构、联合与位字段
介绍在用户自定义类型中数据的组织方式。
第11章,声明
介绍声明的一般语法、标识符链接,以及对象的存储周期。
第12章,动态内存管理
介绍标准库的动态内存管理函数,然后通过实现一个二叉树来展示这些函数的使用方法。
第13章,输入和输出
介绍C语言中输入与输出的概念,然后综述标准I/O链接库的使用方法。
第14章,多线程
介绍C11中多线程特性的使用方法,包括原子操作、线程间交流,以及线程存储。
第15章,预处理命令
介绍宏的定义与使用方法、条件式编译,以及其他所有预处理命令与操作。
第二部分
第二部分包括第16~18章,内容是C语言标准库。这部分综述了标准头文件,并包括了详细的函数使用参考。
第16章,标准头
介绍标准头文件的内容及用途。头文件包含了所有的标准库宏以及类型定义。
第17章,函数简介
通过函数的应用领域,综述标准库函数(例如,数学函数、时间与日期函数等)。
第18章,标准库函数
按照函数名的字母次序,详细介绍每个标准库函数,并使用示例展示每个函数的使用方法。
第三部分
第三部分包括第19~22章,介绍关于C语言编程工具的基础知识,包括:编译器、make工具集,以及调试器。这里所介绍的工具都属于GNU软件包。最后,以Eclipse IDE为例,介绍在C语言集成开发环境(IDE)中如何使用上述工具。
第19章,使用GCC编译C程序
介绍GCC编译器针对C语言程序员所提供的核心功能,GCC编译器是现今广泛使用的C语言编程工具。
第20章,使用make构建C程序
介绍如何使用make程序自动编译大型程序。
第21章,使用GDB调试C程序
介绍如何使用GNU调试器执行程序,以及如何分析程序的执行行为以找到逻辑错误。
第22章,使用IDE
介绍集成开发环境(IDE)的使用方法,IDE使得在C程序开发中可以统一、便利地访问所有工具。
推荐阅读
本书中许多地方都介绍了进一步提升编程能力建议阅读的参考资料,如果读者还需要更多的技术细节,可参阅一些资源站点,例如C语言标准化国际工作组织的官方主页(http://www.open-std.org/jtc1/sc22/wg14),其中提供了C语言标准最新版本的链接,以及该组织当前正在开展的项目。
如果读者的兴趣不仅限于了解C语言是什么、怎样使用,还想知道C语言背后的原理,WG14网站提供了一些关于C语言原理介绍的链接。这些文件介绍了在C语言标准化过程中的一些动机与限制。另外,如果想知道C语言最初是如何创建的,可以阅读C语言之父Dennis Ritchie的文章“The Development of the C Language”(https://www.bell-labs.com/usr/dmr/www/chist.html)。你也可以在他的贝尔实验室网站(https://www.bell-labs.com/usr/dmr/www/index.html)上找到该文章以及其他历史文章。
如果想了解C语言范畴以外的浮点数学的细节信息,可以阅读David Goldberg关于此方面的文献“What Every Computer Scientist Should Know About Floating-Point Arithmetic”,下载网址是:http://docs.sun.com/source/806-3568/ncg_goldberg.html。
本书约定
本书使用下列排版约定:
斜体
标示新的术语;指示文件名、文件扩展、URL、目录以及Unix工具。
等宽字体(constant width)
表示C源代码的所有元素:关键字、运算符、变量、函数、宏、类型、参数与字面量。也用于表示控制台命令与选项,以及这类命令的输出。
等宽粗体(constant width bold)
强调在代码示例中讨论的函数或语句。在编译器make及调试器部分,该字体表示用户键入的输入命令。
等宽斜体(constant width italic)
指示函数原型或占位符的参数,以替代你的值。
纯文本(plain text)
表示按键,例如回车键、Tab键,以及Ctrl键。
表示提示或建议。
表示普通注解。
表示警告或注意。
使用代码示例
补充材料(例如书中列举的代码示例、练习等)可从如下网址下载:https://github.com/oreillymedia/c-in-a-nutshell-2E。
本书的目的是帮助你完成工作。一般情况下,你可以使用本书所提供的样例代码进行编程和文档撰写。不需要联系我们获得许可,除非重现代码的重要部分。例如,使用书中的一些代码段进行编写程序,无需获得许可。销售或发行来自O扲eilly图书的光盘实例,需要获得许可。引用本书和引用代码实例来解决问题,无需获得许可。从本书获取大量的样例代码到你的产品文档,需要获得许可。
我们感激你的署名,但不会强求。署名通常包含书名、作者、出版商和ISBN。例如: “C in a Nutshell, 2nd Edition by Peter Prinz and Tony Crawford (O扲eilly). Copyright 2016 Peter Prinz, Tony Crawford, 978-1-491-90475-6。”
如果你觉得你使用的代码示例超出正当使用或上面给出的权限,请随时与我们联系: permissions@oreilly.com。
Safari Books Online
Safari Books Online是一个点播式数字图书馆,它提供了来自全球在技术与商业方面著名作者所提供的专业知识内容,并以图书与视频形式进行传递。
技术专家、软件开发者、网站设计者,以及商业与创新专家,正在使用Safari Books Online作为他们的首选资源,以开展研究、解决问题、学习与认证培训。
Safari Books Online为企业、政府、学校以及个人提供了一系列的计划,并给出了对应的价格。
作为会员,您可以从该项目的数据库中访问数千图书、培训视频,以及出版前手稿。全球有数百家出版商作为Safari Books Online的内容提供商,其中包括O扲eilly Media,Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams,Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology。关于Safari Books Online的更多信息,请访问其网站(www.safaribooksonline.com)。
如何联系我们
如果你对本书有意见和问题,请联系出版商。
美国:
O''Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书提供了网页,该网页上面列出了勘误表、范例和任何其他附加的信息。您可以访问如下网页获得:
http://bit.ly/C_Nutshell_2e
要询问技术问题或对本书提出建议,请发送电子邮件至:
bookquestions@oreilly.com
要获得更多关于我们的书籍、课程会议和新闻的信息,请参见我们的网站:
http://www.oreilly.com.cn
http://www.oreilly.com
致谢
感谢O''Reilly的每一位成员对本书所做的出色工作,尤其是我们的编辑Rachel Roumeliotis 与 Katie Schooling,他们全程指导了本书的出版。感谢我们的技术审校Matt Crawford、David Kitabjian、Chris LaPre、John C. Craig,以及Lo c Pefferkorn,他们对手稿提出了许多宝贵的意见。还要感谢我们的产品编辑Kristen Brown,文字编辑Gillian McGarvey,他们全身心地对本书排版设计,使得本书精美而富有现代气息。最后,感谢Jonathan Gennick,他这些年一直不遗余力地推动着整个项目的实施。
Peter
首先,感谢Tony在本书写作过程中的出色合作。感谢我所有的朋友,我在创作本书时没有时间与他们相聚,他们一次次给予了理解与支持。最后,我要将本书献给我的女儿Vivian 与 Jeanette(如今她们都获得了计算机科学的博士学位),是她们坚定了我完成本书的信念。
Tony
感谢Peter,让我在本书写作过程中能够充分贡献出我的力量。

上架指导

计算机\程序设计

封底文字

本书是C语言核心技术权威参考指南的升级版,对于C语言及其运行库中的每个特性给予了清晰、详细的解释,包括多线程、泛型宏,以及其他2011年C语言标准(C11)中的新功能。如果你想理解一个陌生函数的作用,以及标准链接库如何规范它的执行,你可以在本书中找到答案。
对于有经验的C/C++程序员,这本书也相当适用,它包含了GNU软件工具集中常用工具的使用说明。你将会学到如何使用GNU make创建C程序,从C源代码编译获得执行程序,以及使用GNU调试器对程序进行测试与调试。
本书包括以下三个部分:
- C语言基本概念与元素,包括类型、语句、指针、内存管理、I/O等
- C语言标准链接库,包括标准头综述,以及详细的标准函数参考
- 在GNU软件工具集中的C语言编程基本工具,并介绍了如何在Eclipse IDE中使用它们

“对于C语言程序员,本书是一个完美的生产力工具。它带给你2011标准中许多最新的高级功能。”
—Peter Hessheimer,项目经理,KPIT Technology

Peter Prinz以一名研讨会组织者和关键课程开发者的身份,向数以千计的软件开发者教授UNIX和Windows系统技术。他也是多本有关C/C++软件开发书籍的合著者。
Tony Crawford是一名技术作家与译者,他在C语言、软件本地化与网络管理方面拥有深厚的技术背景。

作者简介

[德] 彼得?普林茨(Peter Prinz),托尼?克劳福德(Tony Crawford)著:暂无相关简介

译者简介

袁野 译:暂无简介

译者序

相信很多工科专业的同仁与我一样,在入门编程时学习的第一门编程语言就是C语言。这是大学本科几乎全部理工专业必修的一门课程。随着技术的不断发展,编程已经从“程序开发”演变为“与机器交流”,新语言、新工具层出不穷。然而,通过C语言打下的基础仿佛内化为了一种认知模式,只要从事与编程相关的工作,那些语法概念、算法模型和编译方式总能帮助我更快地摸索新语言与新工具的特性,理解它们的运行机理,然后运用它们完成任务。
具体领域中的程序开发,很多情况下只会对部分语言特性或者说特定的几个函数库有非常深入的应用,例如,在工业智能元件程序开发过程中,我的大量时间花费在处理运算效率和硬件通信上。“工欲善其事,必先利其器”,当程序员要用到语言的更高级特性、更深层机理时,迫切所需的是一本“集大成”的工具书。它应该具有这样的特点:在宏观上脉络清晰、可读性好,在微观上具体细致、操作性强,使得程序员可以快速查阅所需知识在语言体系上的“分支”,并通过实例举一反三,高效解决当前问题。本书则是这样一种针对C程序员的非常理想的“生产力工具”。
本书为《C语言核心技术》的第2版。在第1版基础上,第2版增加了ISO/IEC 9899:2011(简称为C11)的新特性,例如多线程、泛型宏、安全函数等。全书共包括三个部分:
第一部分介绍C语言基础知识,包括基本概念、数据类型、语句、函数、数组、指针、输入/输出与多线程等。与入门类书籍相比,本书更为侧重语法的内部机理,讲述了很多语法规则的“来龙去脉”,深入浅出、易于理解。
第二部分介绍C语言标准链接库,包括标准头与标准链接库函数。读者可以快速查阅到主要应用领域下的标准链接库函数。
第三部分介绍C语言编程工具的基础知识,包括GCC、make、GDB与IDE。在介绍工具的同时,还阐述了C程序编译与调试的机理,对于在Unix、Linux下进行C语言开发的读者尤其具有参考价值。
本书作者Peter Prinz是一名研讨会领导者和关键课程开发者,他向数以千计的软件开发人员教授Unix和Windows系统技术,同时也是多本有关C/C++软件开发书籍的作者。本书另一位作者Tony Crawford,是一名来自德国柏林的自由作家、编辑与译者。虽然本书内容全面、篇幅较大,但两位作者逻辑清晰、用词严谨,在深入浅出地介绍语法机理与函数功能的同时,配合以大量极富价值的示例代码,充分展现了他们深厚的理论功底与丰富的实践经验。
本书的翻译能够顺利完成,得益于家人与朋友的鼎力支持,在此深表谢意。特别要感谢我的妻子刘昱,当我遇到难译词句时,她凭借同传的丰富经验,从翻译技巧方面给予了耐心的指导与帮助。同时,在我埋头工作时,她悉心照料起居,让我得以专心致志。另外,在本书的翻译出版过程中,还得到了机械工业出版社华章分社的大力相助,特此表示衷心感谢。
本书包含C语言的方方面面,其内容的全面性与深刻性给翻译工作带来了巨大挑战。为了力求准确无误地表达作者原意,虽然查阅了大量资料、仔细求证、反复斟酌,但难免会有疏漏之处,望广大读者批评指正。

袁野
2016年8月于长沙

图书目录

前言 1
第一部分 语言
第1章 C语言基础 11
1.1 C语言特性 11
1.2 C语言程序的结构 12
1.3 源代码文件 14
1.4 注释 15
1.5 字符集 16
1.6 标识符 22
1.7 C编译器运行原理 26
第2章 数据类型 29
2.1 数据类型分类 29
2.2 整数类型 30
2.3 浮点类型 36
2.4 复数浮点类型 38
2.5 枚举类型 39
2.6 void类型 40
2.7 对象在内存中的对齐方式 41
第3章 字面量 43
3.1 整数常量 43
3.2 浮点常量 44
3.3 字符常量 46
3.4 字符串字面量 49
第4章 类型转换 53
4.1 算术类型的转换 54
4.2 非算术类型的转换 61
第5章 表达式和运算符 69
5.1 如何计算表达式 70
5.2 运算符细节 75
5.3 常量表达式 98
第6章 语句 100
6.1 表达式语句 100
6.2 语句块 101
6.3 循环 102
6.4 选择语句 106
6.5 无条件跳转 110
第7章 函数 114
7.1 函数定义 114
7.2 函数声明 121
7.3 函数如何被执行 122
7.4 指针作为参数和返回值 122
7.5 内联函数 124
7.6 无返回函数 125
7.7 递归函数 126
7.8 可变参数函数 127
第8章 数组 129
8.1 定义数组 129
8.2 获取数组元素 131
8.3 初始化数组 132
8.4 字符串 134
8.5 多维数组 136
8.6 数组作为函数参数 138
第9章 指针 140
9.1 声明指针 140
9.2 指针运算 143
9.3 指针和类型限定符 147
9.4 数组的指针和指针的数组 151
9.5 指向函数的指针 155
第10章 结构、联合与位字段 157
10.1 结构 157
10.2 联合 167
10.3 匿名结构与联合 169
10.4 位字段 170
第11章 声明 173
11.1 对象与函数声明 174
11.2 类型名称 181
11.3 typedef 声明 182
11.4 _Static_assert 声明 184
11.5 标识符的链接 185
11.6 对象的存储周期 186
11.7 初始化 187
第12章 动态内存管理 190
12.1 动态内存分配 190
12.2 已分配内存的特性 192
12.3 调整内存大小和释放内存 193
12.4 通用二叉树 194
12.5 特性 195
12.6 二叉树的实现 195
第13章 输入和输出 205
13.1 流 205
13.2 文件 207
13.3 打开和关闭文件 209
13.4 读操作和写操作 211
13.5 文件随机访问 230
第14章 多线程 233
14.1 线程 233
14.2 访问共享数据 238
14.3 线程间的通信:条件变量 245
14.4 线程对象和线程存储 249
第15章 预处理命令 253
15.1 插入头文件的内容 254
15.2 定义和使用宏 256
15.3 泛型宏 263
15.4 条件式编译 264
15.5 定义行号 266
15.6 生成错误消息 266
15.7 #pragma命令 267
15.8 _Pragma运算符 267
15.9 预定义的宏 268
第二部分 标准库
第16章 标准头 273
16.1 使用标准头 273
16.2 边界检查函数 277
16.3 标准头的内容 278
第17章 函数简介 308
17.1 输入和输出 308
17.2 数学函数 309
17.3 字符分类和转换 316
17.4 字符串处理 318
17.5 多字节字符 319
17.6 在数字与字符串之间转换 321
17.7 搜索和排序 322
17.8 内存区域处理 322
17.9 动态内存管理 323
17.10 日期和时间 323
17.11 进程控制 324
17.12 国际化 325
17.13 非本地跳转 326
17.14 多线程(C11) 327
17.15 调试 331
17.16 错误消息 331
第18章 标准库函数 333
第三部分 基本工具
第19章 使用GCC编译C程序 673
19.1 GNU编译器套件 673
19.2 获取和安装GCC 674
19.3 使用GCC编译C程序 675
19.4 C方言 685
19.5 编译器警告 686
19.6 优化 688
19.7 调试 692
19.8 剖析 692
19.9 选项和环境变量汇总 692
第20章 使用make构建C程序 698
20.1 目标、依赖和命令 698
20.2 Makefile 699
20.3 规则 699
20.4 注释 706
20.5 变量 707
20.6 伪目标 714
20.7 其他目标属性 716
20.8 宏 717
20.9 函数 718
20.10 命令 722
20.11 执行make命令 725
第21章 使用GDB调试C程序 733
21.1 安装GDB 733
21.2 调试过程示例 734
21.3 启动GDB 738
21.4 使用GDB命令 743
21.5 在GDB内分析核心文件 765
第22章 使用IDE 767
22.1 针对C语言的IDE 767
22.2 针对C/C++的Eclipse IDE 768
22.3 使用Eclipse开发一个C程序 770
22.4 使用Eclipse调试一个C程序 773
22.5 关于Eclipse的更多信息 775

教学资源推荐
作者: 宋晓宇 主编 赵艳平 副主编 杨艳春 李世伟 张洁 编著
作者: 谢满德 邵俊 编著
作者: [美]德洛莉丝 M. 埃特尔(Delores M. Etter) 著
作者: [美] 凯·霍斯特曼(Cay Horstmann) 著
参考读物推荐
作者: 姜晓东 著
作者: 谢佳标 著
作者: 丁如敏 盛娟 等著