C 编程语言,堪称编程语言中的全能选手,它不仅功能强大、灵活,而且适用场景非常广泛。但是要想真正掌握 C ,其技术门槛往往较高,这也使新手学起来困难,甚至连老手也觉得用好它并不容易。
本书根据作者 20 多年编写 C 代码的实践经验,精选出了现代 C 中好用且实用的若干特性,通过代码演示实战技巧,帮助读者轻松地看懂、学会 C 编程。本书从开发环境、开发综述、核心语言特性、标准库、进阶技能、设计模式、应用实例等方面深入浅出地介绍了 C 实战技巧。除此之外,本书还囊括了作者多年的开发心得,例如图书推荐、工作经验分享、时间管理方法等特色内容。
本书并不是一本入门教程,比较适合学过 C 基础知识,仍缺乏高效的 C 实战技巧的读者阅读。通过阅读本书,读者可以深入洞悉 C 核心知识,进一步夯实实战技能,开拓编程思路。
1.本书根据作者编写C 代码20多年的实践经验,精选出了现代 C 中好用且实用的特性,通过代码演示实战技巧,帮助读者轻松地看懂、学会 C 编程;
2.本书内容丰富,从开发环境、开发综述、核心语言特性、标准库、进阶技能、设计模式、应用实例等方面深入浅出地介绍了 C 实战技巧;
3.此外本书还总结了作者多年的开发软技能,比如开发心得和工作经验分享,让你在代码之外,帮助你更好地经营自己的程序员生涯;
4.本书不仅适合入门学习,同样适用于掌握一定C 基础知识,想提升实战技巧的读者进一步夯实技能,开拓编程思路。
罗剑锋,网名Chrono,前奇虎360技术专业人士,Nginx/OpenResty开源项目贡献者,也是极客时间《透视HTTP协议》等专栏的作者。他熟悉各种网络应用协议,专注于C/C 、Linux、高性能编程等领域,著有《C 11/14 高级编程》《Boost程序库完全开发指南》《Nginx 完全开发指南》《OpenResty 完全开发指南》等图书。
第 1章 C 开发环境 1
1.1 环境要求 1
1.1.1 操作系统 1
1.1.2 编译器 2
1.1.3 实际环境 2
1.2 使用VM搭建环境 3
1.3 使用Docker搭建环境 3
1.4 使用Kubernetes搭建环境 4
1.5 测试并验证 5
1.6 小结 6
1.7 常见问题解答 7
第 2章 C 开发综述 8
2.1 C 标准简介 8
2.1.1 C 98/03 8
2.1.2 C 11/14 9
2.1.3 C 17 9
2.1.4 C 20 10
2.1.5 C 标准小结 10
2.2 重新认识C 10
2.2.1 生命周期 10
2.2.2 编程范式 13
2.2.3 C 核心知识小结 15
2.3 编码阶段的代码风格 16
2.3.1 留白的艺术 17
2.3.2 命名规范 18
2.3.3 注释规范 20
2.3.4 源码组织和管理 22
2.3.5 其他注意事项 23
2.3.6 代码风格小结 24
2.4 预处理阶段编程 24
2.4.1 预处理简介 24
2.4.2 包含文件 25
2.4.3 宏定义 26
2.4.4 条件编译 28
2.4.5 预处理小结 30
2.5 编译阶段编程 31
2.5.1 编译简介 31
2.5.2 属性 32
2.5.3 静态断言 35
2.5.4 编译小结 37
2.6 运行阶段的调试分析 37
2.7 常见问题解答 38
第3章 C 核心语言特性 41
3.1 面向对象编程 41
3.1.1 设计思想 42
3.1.2 实现原则 42
3.1.3 编码准则 44
3.1.4 实用技巧 46
3.1.5 面向对象编程小结 49
3.2 自动类型推导 49
3.2.1 什么是自动类型推导 50
3.2.2 auto关键字 52
3.2.3 decltype关键字 53
3.2.4 用好自动类型推导 55
3.2.5 自动类型推导小结 57
3.3 常量与变量 57
3.3.1 const/volatile关键字 57
3.3.2 const的使用方法 59
3.3.3 mutable关键字 62
3.3.4 constexpr关键字 63
3.3.5 常量与变量小结 64
3.4 异常 65
3.4.1 为什么要有异常 66
3.4.2 异常的用法 67
3.4.3 谨慎使用异常 70
3.4.4 保证不抛出异常 71
3.4.5 异常小结 72
3.5 函数式编程 72
3.5.1 关于函数的讨论 73
3.5.2 lambda是什么 73
3.5.3 lambda的形式 75
3.5.4 函数式编程小结 79
3.6 其他新特性精选 80
3.6.1 内联名字空间 80
3.6.2 嵌套名字空间 80
3.6.3 强类型枚举 81
3.6.4 条件语句初始化 82
3.6.5 二进制字面值 82
3.6.6 数字分位符 83
3.7 常见问题解答 83
第4章 C 标准库 86
4.1 智能指针 86
4.1.1 智能指针简介 86
4.1.2 专有指针 87
4.1.3 共享指针 89
4.1.4 弱引用指针 91
4.1.5 智能指针小结 93
4.2 字符串 94
4.2.1 字符串类型 94
4.2.2 字符串的用法 95
4.2.3 字符串视图 98
4.2.4 字符串格式化 100
4.2.5 正则表达式 101
4.2.6 字符串小结 106
4.3 标准容器 107
4.3.1 容器简介 107
4.3.2 容器的特性 108
4.3.3 顺序容器 108
4.3.4 有序容器 110
4.3.5 无序容器 112
4.3.6 标准容器小结 114
4.4 特殊容器 115
4.4.1 可选值 115
4.4.2 可变值 117
4.4.3 任意值 120
4.4.4 多元组 121
4.4.5 特殊容器小结 123
4.5 标准算法 123
4.5.1 算法简介 123
4.5.2 迭代器简介 125
4.5.3 遍历算法 126
4.5.4 排序算法 128
4.5.5 查找算法 129
4.5.6 范围算法 132
4.5.7 标准算法小结 135
4.6 线程并发 135
4.6.1 线程简介 136
4.6.2 单次调用 137
4.6.3 局部存储 138
4.6.4 原子变量 139
4.6.5 线程接口 142
4.6.6 线程并发小结 145
4.7 常见问题解答 145
第5章 C 进阶技能 149
5.1 准标准库 149
5.1.1 字符串转换 150
5.1.2 字符串算法 152
5.1.3 高精度计时器 155
5.1.4 准标准库小结 157
5.2 数据序列化 157
5.2.1 JSON 158
5.2.2 MessagePack 160
5.2.3 ProtoBuffer 163
5.2.4 数据序列化小结 165
5.3 网络通信 166
5.3.1 libcurl 166
5.3.2 cpr 168
5.3.3 cinatra 170
5.3.4 ZMQ 176
5.3.5 网络通信小结 179
5.4 多语言混合编程 179
5.4.1 Python 180
5.4.2 Lua 184
5.4.3 多语言混合编程小结 187
5.5 性能分析 188
5.5.1 外部查看 188
5.5.2 内部分析 192
5.5.3 性能分析小结 195
5.6 常见问题解答 196
第6章 C 与设计模式 199
6.1 设计模式简介 199
6.2 设计原则简介 200
6.2.1 SOLID原则 201
6.2.2 DRY/KISS原则 203
6.3 解读设计模式 203
6.3.1 创建型模式 203
6.3.2 结构型模式 205
6.3.3 行为模式 206
6.3.4 其他模式 208
6.4 小结 209
第7章 C 应用实例 211
7.1 项目设计 211
7.2 预备开发 212
7.2.1 核心头文件 213
7.2.2 自旋锁 213
7.2.3 网络通信 215
7.2.4 配置解析 216
7.3 正式开发 218
7.3.1 数据定义 218
7.3.2 数据序列化 220
7.3.3 数据存储和统计 220
7.3.4 主服务器 222
7.4 测试验证 225
7.4.1 后端服务器 225
7.4.2 客户端 226
7.4.3 运行效果 227
7.5 小结 227
第8章 结束语 229
8.1 公正看待C 229
8.2 如何学习C 230
8.3 临别赠言 230
附录A 经典图书推荐 232
A.1 《设计模式:可复用面向对象软件的基础》 232
A.2 《C 标准程序库》 233
A.3 《C 语言的设计与演化》 233
A.4 《C Primer》 234
A.5 小结 234
附录B 工作经验分享 236
B.1 Linux 236
B.2 Vim 237
B.3 Git 239
B.4 GDB 239
附录C 时间管理 241
C.1 工作时间的管理 241
C.2 工作小技巧 243
C.3 非工作时间的管理 243
C.4 小结 245