前言 1
第一部分 语言 11
第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
第二部分 标准库 273
第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
第三分 基本工具 673
第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