新書推薦:
《
虚弱的反攻:开禧北伐
》
售價:NT$
429.0
《
泰山:一种中国信仰专论(法国汉学经典译丛)
》
售價:NT$
380.0
《
花外集斠箋
》
售價:NT$
704.0
《
有兽焉.8
》
售價:NT$
305.0
《
大学问·明清经济史讲稿
》
售價:NT$
330.0
《
中国国际法年刊(2023)
》
售價:NT$
539.0
《
早点知道会幸福的那些事
》
售價:NT$
295.0
《
迈尔斯普通心理学
》
售價:NT$
760.0
|
內容簡介: |
这本新版的经典O’Reilly参考书,对于C语言及其运行库中的每个特性给予了清晰、详细的解释,包括多线程、泛型宏,以及其他2011年C语言标准(C11)中的新功能。如果您想理解一个陌生函数的作用,以及标准链接库是如何规范它的执行,您可以在本书中找到答案。对于有经验的C与C++程序员,这本书也相当适用,它包含了GNU软件工具集中常用工具的使用说明。您将会学到如何使用GNUmake创建C程序,从C源代码编译获得执行程序,以及使用GNU调试器对程序进行测试与调试。
|
目錄:
|
前言 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 针对CC++的Eclipse IDE 768
22.3 使用Eclipse开发一个C程序 770
22.4 使用Eclipse调试一个C程序 773
22.5 关于Eclipse的更多信息 775
|
內容試閱:
|
本书是一本关于C编程语言与C语言链接库的完整参考手册。作为一本阐述核心技术(In a Nutshell)的书,它的目的是在日常工作中为C语言程序员提供方便、可靠的辅助作用。本书介绍了C语言的所有元素,并通过大量的示例展示了这些元素的用法。
最新的C语言规范是2011年发布的C语言国际标准,ISOIEC 9899:2011,通常称为C11。该标准取代了C99标准(ISOIEC 9899:1999)及其技术修正,这些修正包括2001年的TC1、2004年的TC2,以及2007年的TC3。第一个C语言国际标准于1990年发布,名为ISOIEC 9899:1990,它于1995年增补了规范性附录1(ISOIEC9899AMD1:1995)。1990年的ISOIEC标准对应于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语言中输入与输出的概念,然后综述标准IO链接库的使用方法。
第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.orgjtc1sc22wg14),其中提供了C语言标准最新版本的链接,以及该组织当前正在开展的项目。
如果读者的兴趣不仅限于了解C语言是什么、怎样使用,还想知道C语言背后的原理,WG14网站提供了一些关于C语言原理介绍的链接。这些文件介绍了在C语言标准化过程中的一些动机与限制。另外,如果想知道C语言最初是如何创建的,可以阅读C语言之父Dennis Ritchie的文章“The Development of the C Language”(https:www.bell-labs.comusrdmrwwwchist.html)。你也可以在他的贝尔实验室网站(https:www.bell-labs.comusrdmrwwwindex.html)上找到该文章以及其他历史文章。
如果想了解C语言范畴以外的浮点数学的细节信息,可以阅读David Goldberg关于此方面的文献“What Every Computer Scientist Should Know About Floating-Point Arithmetic”,下载网址是:http:docs.sun.comsource806-3568ncg_goldberg.html。
本书约定本书使用下列排版约定:
斜体标示新的术语;指示文件名、文件扩展、URL、目录以及Unix工具。
等宽字体(constant width)表示C源代码的所有元素:关键字、运算符、变量、函数、宏、类型、参数与字面量。也用于表示控制台命令与选项,以及这类命令的输出。
等宽粗体(constant width bold)强调在代码示例中讨论的函数或语句。在编译器make及调试器部分,该字体表示用户键入的输入命令。
等宽斜体(constant width italic)指示函数原型或占位符的参数,以替代你的值。
纯文本(plain text)表示按键,例如回车键、Tab键,以及Ctrl键。
表示提示或建议。
表示普通注解。
表示警告或注意。
使用代码示例补充材料(例如书中列举的代码示例、练习等)可从如下网址下载:https:github.comhzbooksc-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 OnlineSafari 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 NorthSebastopol,CA 95472中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)奥莱利技术咨询(北京)有限公司我们为本书提供了网页,该网页上面列出了勘误表、范例和任何其他附加的信息。您可以访问如下网页获得:
http:bit.lyC_Nutshell_2e要询问技术问题或对本书提出建议,请发送电子邮件至:
bookquestions@oreilly.com要获得更多关于我们的书籍、课程会议和新闻的信息,请参见我们的网站:
http:www.oreilly.com.cnhttp: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,让我在本书写作过程中能够充分贡献出我的力量。
|
|