6 玩转指针
6.1 自动、静态和手工内存
6.2 持久性的状态变量
例6-1 由一个状态机所生成的菲波那契数列(fibo.c)
6.3 不使用malloc的指针
6.3.1 结构被复制,数组创建别名
6.3.2 malloc和内存操纵
6.3.3 错误来源于星号
6.3.4 你需要知道的各种指针运算
typedef作为一种教学工具
7 可以忽略的C语法
7.1 不需要明确地从main函数返回
7.3 减少类型转换
7.4 枚举和字符串
7.5 标签、goto、switch和break
7.5.1 考虑goto
7.5.2 switch
7.6 被摒弃的float
例7-3 float能够存储这么多的不同数字(floatfail.c)
例7-4 病态的数据:不再成为大问题(stddev.c)
8 障碍和机遇
8.1 营造健壮和繁盛的宏
例8-1 我们可以用花括号控制变量的作用域,就像典型的非宏代码一样(curly.c)
预处理器技巧
9 文本
9.1 使用asprintf,使字符串的处理不再痛苦
例9-1 创建字符串的乏味方法(sadstrings.c)
例9-2 这个版本只是从例9-1中删除了2行,但这2行却是最令人感觉痛苦的 (getstrings.c)
9.1.1 安全
9.1.2 常量字符串
9.1.3 用asprintf扩展字符串
9.1.4 strtok的赞歌
9.2 Unicode
9.2.1 C代码的编码
9.2.2 Unicode函数库
9.2.3 示例代码
10 更好的结构
10.1 复合文字
例10-1 我们可以使用复合文字来绕过临时变量(sum_to_nan.c)
通过复合文字进行初始化
10.2 可变参数宏
例10-2 一个用于处理错误的宏,取自例2-5(stopif.h)
例10-3 宏的...覆盖了for循环的整个循环体(varad.c)
10.3 安全终止的列表
例10-4 使用一个可变参数宏生成一个复合文字(safe_sum.c)
10.4 Foreach
10.5 函数的向量化
例10-5 把接受任何指针类型的参数的任何函数进行向量化的机制(vectorize.c)
10.6 指定的初始化值
例10-6 使用指定的初始化值指定一个结构(boxes.c)
10.7 用零初始化数组和结构
10.9 从函数返回多个数据项
例10-7 如果需要从一个函数中返回多个值,可以返回一个结构(papersize.c)
报告错误
10.10 灵活的函数输入
10.10.1 把函数声明为printf风格
10.10.2 可选参数和命名参数
10.10.3 使无聊的函数焕发光彩
10.11 void指针以及它所指向的结构
10.11.1 具有通用输入的函数
10.11.2 通用结构
12 库
12.1 GLib
12.2 POSIX
12.2.1 为巨大的数据集合使用mmap
12.2.2 用Pthreads轻松实现线程
1.Pthreads列表
2.用mutex保护线程资源
3.示例
4._Thread_local和静态变量
12.3 GNU科学计算库
例12-5 找到与一组输入点距离之和最小的点(gsl_distance.c)
12.5 libxml和cURL
例12-6 解析一个简单格式输入的纽约时报的头条(nyt_feed.c)