C 編程語言,堪稱編程語言中的全能選手,它不僅功能強大、靈活,而且適用場景非常廣泛。但是要想真正掌握 C ,其技術門檻往往較高,這也使新手學起來困難,甚至連老手也覺得用好它并不容易。
本書根據(jù)作者 20 多年編寫 C 代碼的實踐經(jīng)驗,精選出了現(xiàn)代 C 中好用且實用的若干特性,通過代碼演示實戰(zhàn)技巧,幫助讀者輕松地看懂、學會 C 編程。本書從開發(fā)環(huán)境、開發(fā)綜述、核心語言特性、標準庫、進階技能、設計模式、應用實例等方面深入淺出地介紹了 C 實戰(zhàn)技巧。除此之外,本書還囊括了作者多年的開發(fā)心得,例如圖書推薦、工作經(jīng)驗分享、時間管理方法等特色內(nèi)容。
本書并不是一本入門教程,比較適合學過 C 基礎知識,仍缺乏高效的 C 實戰(zhàn)技巧的讀者閱讀。通過閱讀本書,讀者可以深入洞悉 C 核心知識,進一步夯實實戰(zhàn)技能,開拓編程思路。
1.本書根據(jù)作者編寫C 代碼20多年的實踐經(jīng)驗,精選出了現(xiàn)代 C 中好用且實用的特性,通過代碼演示實戰(zhàn)技巧,幫助讀者輕松地看懂、學會 C 編程;
2.本書內(nèi)容豐富,從開發(fā)環(huán)境、開發(fā)綜述、核心語言特性、標準庫、進階技能、設計模式、應用實例等方面深入淺出地介紹了 C 實戰(zhàn)技巧;
3.此外本書還總結(jié)了作者多年的開發(fā)軟技能,比如開發(fā)心得和工作經(jīng)驗分享,讓你在代碼之外,幫助你更好地經(jīng)營自己的程序員生涯;
4.本書不僅適合入門學習,同樣適用于掌握一定C 基礎知識,想提升實戰(zhàn)技巧的讀者進一步夯實技能,開拓編程思路。
羅劍鋒,網(wǎng)名Chrono,前奇虎360技術專業(yè)人士,Nginx/OpenResty開源項目貢獻者,也是極客時間《透視HTTP協(xié)議》等專欄的作者。他熟悉各種網(wǎng)絡應用協(xié)議,專注于C/C 、Linux、高性能編程等領域,著有《C 11/14 高級編程》《Boost程序庫完全開發(fā)指南》《Nginx 完全開發(fā)指南》《OpenResty 完全開發(fā)指南》等圖書。
第 1章 C 開發(fā)環(huán)境 1
1.1 環(huán)境要求 1
1.1.1 操作系統(tǒng) 1
1.1.2 編譯器 2
1.1.3 實際環(huán)境 2
1.2 使用VM搭建環(huán)境 3
1.3 使用Docker搭建環(huán)境 3
1.4 使用Kubernetes搭建環(huán)境 4
1.5 測試并驗證 5
1.6 小結(jié) 6
1.7 常見問題解答 7
第 2章 C 開發(fā)綜述 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 標準小結(jié) 10
2.2 重新認識C 10
2.2.1 生命周期 10
2.2.2 編程范式 13
2.2.3 C 核心知識小結(jié) 15
2.3 編碼階段的代碼風格 16
2.3.1 留白的藝術 17
2.3.2 命名規(guī)范 18
2.3.3 注釋規(guī)范 20
2.3.4 源碼組織和管理 22
2.3.5 其他注意事項 23
2.3.6 代碼風格小結(jié) 24
2.4 預處理階段編程 24
2.4.1 預處理簡介 24
2.4.2 包含文件 25
2.4.3 宏定義 26
2.4.4 條件編譯 28
2.4.5 預處理小結(jié) 30
2.5 編譯階段編程 31
2.5.1 編譯簡介 31
2.5.2 屬性 32
2.5.3 靜態(tài)斷言 35
2.5.4 編譯小結(jié) 37
2.6 運行階段的調(diào)試分析 37
2.7 常見問題解答 38
第3章 C 核心語言特性 41
3.1 面向?qū)ο缶幊獭?1
3.1.1 設計思想 42
3.1.2 實現(xiàn)原則 42
3.1.3 編碼準則 44
3.1.4 實用技巧 46
3.1.5 面向?qū)ο缶幊绦〗Y(jié) 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 自動類型推導小結(jié) 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 常量與變量小結(jié) 64
3.4 異!65
3.4.1 為什么要有異常 66
3.4.2 異常的用法 67
3.4.3 謹慎使用異!70
3.4.4 保證不拋出異常 71
3.4.5 異常小結(jié) 72
3.5 函數(shù)式編程 72
3.5.1 關于函數(shù)的討論 73
3.5.2 lambda是什么 73
3.5.3 lambda的形式 75
3.5.4 函數(shù)式編程小結(jié) 79
3.6 其他新特性精選 80
3.6.1 內(nèi)聯(lián)名字空間 80
3.6.2 嵌套名字空間 80
3.6.3 強類型枚舉 81
3.6.4 條件語句初始化 82
3.6.5 二進制字面值 82
3.6.6 數(shù)字分位符 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 智能指針小結(jié) 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 字符串小結(jié) 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 標準容器小結(jié) 114
4.4 特殊容器 115
4.4.1 可選值 115
4.4.2 可變值 117
4.4.3 任意值 120
4.4.4 多元組 121
4.4.5 特殊容器小結(jié) 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 標準算法小結(jié) 135
4.6 線程并發(fā) 135
4.6.1 線程簡介 136
4.6.2 單次調(diào)用 137
4.6.3 局部存儲 138
4.6.4 原子變量 139
4.6.5 線程接口 142
4.6.6 線程并發(fā)小結(jié) 145
4.7 常見問題解答 145
第5章 C 進階技能 149
5.1 準標準庫 149
5.1.1 字符串轉(zhuǎn)換 150
5.1.2 字符串算法 152
5.1.3 高精度計時器 155
5.1.4 準標準庫小結(jié) 157
5.2 數(shù)據(jù)序列化 157
5.2.1 JSON 158
5.2.2 MessagePack 160
5.2.3 ProtoBuffer 163
5.2.4 數(shù)據(jù)序列化小結(jié) 165
5.3 網(wǎng)絡通信 166
5.3.1 libcurl 166
5.3.2 cpr 168
5.3.3 cinatra 170
5.3.4 ZMQ 176
5.3.5 網(wǎng)絡通信小結(jié) 179
5.4 多語言混合編程 179
5.4.1 Python 180
5.4.2 Lua 184
5.4.3 多語言混合編程小結(jié) 187
5.5 性能分析 188
5.5.1 外部查看 188
5.5.2 內(nèi)部分析 192
5.5.3 性能分析小結(jié) 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 創(chuàng)建型模式 203
6.3.2 結(jié)構(gòu)型模式 205
6.3.3 行為模式 206
6.3.4 其他模式 208
6.4 小結(jié) 209
第7章 C 應用實例 211
7.1 項目設計 211
7.2 預備開發(fā) 212
7.2.1 核心頭文件 213
7.2.2 自旋鎖 213
7.2.3 網(wǎng)絡通信 215
7.2.4 配置解析 216
7.3 正式開發(fā) 218
7.3.1 數(shù)據(jù)定義 218
7.3.2 數(shù)據(jù)序列化 220
7.3.3 數(shù)據(jù)存儲和統(tǒng)計 220
7.3.4 主服務器 222
7.4 測試驗證 225
7.4.1 后端服務器 225
7.4.2 客戶端 226
7.4.3 運行效果 227
7.5 小結(jié) 227
第8章 結(jié)束語 229
8.1 公正看待C 229
8.2 如何學習C 230
8.3 臨別贈言 230
附錄A 經(jīng)典圖書推薦 232
A.1 《設計模式:可復用面向?qū)ο筌浖幕A》 232
A.2 《C 標準程序庫》 233
A.3 《C 語言的設計與演化》 233
A.4 《C Primer》 234
A.5 小結(jié) 234
附錄B 工作經(jīng)驗分享 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 小結(jié) 245