C 編程語言,堪稱編程語言中的全能選手,它不僅功能強(qiáng)大、靈活,而且適用場(chǎng)景非常廣泛。但是要想真正掌握 C ,其技術(shù)門檻往往較高,這也使新手學(xué)起來困難,甚至連老手也覺得用好它并不容易。
本書根據(jù)作者 20 多年編寫 C 代碼的實(shí)踐經(jīng)驗(yàn),精選出了現(xiàn)代 C 中好用且實(shí)用的若干特性,通過代碼演示實(shí)戰(zhàn)技巧,幫助讀者輕松地看懂、學(xué)會(huì) C 編程。本書從開發(fā)環(huán)境、開發(fā)綜述、核心語言特性、標(biāo)準(zhǔn)庫(kù)、進(jìn)階技能、設(shè)計(jì)模式、應(yīng)用實(shí)例等方面深入淺出地介紹了 C 實(shí)戰(zhàn)技巧。除此之外,本書還囊括了作者多年的開發(fā)心得,例如圖書推薦、工作經(jīng)驗(yàn)分享、時(shí)間管理方法等特色內(nèi)容。
本書并不是一本入門教程,比較適合學(xué)過 C 基礎(chǔ)知識(shí),仍缺乏高效的 C 實(shí)戰(zhàn)技巧的讀者閱讀。通過閱讀本書,讀者可以深入洞悉 C 核心知識(shí),進(jìn)一步夯實(shí)實(shí)戰(zhàn)技能,開拓編程思路。
1.本書根據(jù)作者編寫C 代碼20多年的實(shí)踐經(jīng)驗(yàn),精選出了現(xiàn)代 C 中好用且實(shí)用的特性,通過代碼演示實(shí)戰(zhàn)技巧,幫助讀者輕松地看懂、學(xué)會(huì) C 編程;
2.本書內(nèi)容豐富,從開發(fā)環(huán)境、開發(fā)綜述、核心語言特性、標(biāo)準(zhǔn)庫(kù)、進(jìn)階技能、設(shè)計(jì)模式、應(yīng)用實(shí)例等方面深入淺出地介紹了 C 實(shí)戰(zhàn)技巧;
3.此外本書還總結(jié)了作者多年的開發(fā)軟技能,比如開發(fā)心得和工作經(jīng)驗(yàn)分享,讓你在代碼之外,幫助你更好地經(jīng)營(yíng)自己的程序員生涯;
4.本書不僅適合入門學(xué)習(xí),同樣適用于掌握一定C 基礎(chǔ)知識(shí),想提升實(shí)戰(zhàn)技巧的讀者進(jìn)一步夯實(shí)技能,開拓編程思路。
羅劍鋒,網(wǎng)名Chrono,前奇虎360技術(shù)專業(yè)人士,Nginx/OpenResty開源項(xiàng)目貢獻(xiàn)者,也是極客時(shí)間《透視HTTP協(xié)議》等專欄的作者。他熟悉各種網(wǎng)絡(luò)應(yīng)用協(xié)議,專注于C/C 、Linux、高性能編程等領(lǐng)域,著有《C 11/14 高級(jí)編程》《Boost程序庫(kù)完全開發(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 實(shí)際環(huán)境 2
1.2 使用VM搭建環(huán)境 3
1.3 使用Docker搭建環(huán)境 3
1.4 使用Kubernetes搭建環(huán)境 4
1.5 測(cè)試并驗(yàn)證 5
1.6 小結(jié) 6
1.7 常見問題解答 7
第 2章 C 開發(fā)綜述 8
2.1 C 標(biāo)準(zhǔn)簡(jiǎn)介 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 標(biāo)準(zhǔn)小結(jié) 10
2.2 重新認(rèn)識(shí)C 10
2.2.1 生命周期 10
2.2.2 編程范式 13
2.2.3 C 核心知識(shí)小結(jié) 15
2.3 編碼階段的代碼風(fēng)格 16
2.3.1 留白的藝術(shù) 17
2.3.2 命名規(guī)范 18
2.3.3 注釋規(guī)范 20
2.3.4 源碼組織和管理 22
2.3.5 其他注意事項(xiàng) 23
2.3.6 代碼風(fēng)格小結(jié) 24
2.4 預(yù)處理階段編程 24
2.4.1 預(yù)處理簡(jiǎn)介 24
2.4.2 包含文件 25
2.4.3 宏定義 26
2.4.4 條件編譯 28
2.4.5 預(yù)處理小結(jié) 30
2.5 編譯階段編程 31
2.5.1 編譯簡(jiǎn)介 31
2.5.2 屬性 32
2.5.3 靜態(tài)斷言 35
2.5.4 編譯小結(jié) 37
2.6 運(yùn)行階段的調(diào)試分析 37
2.7 常見問題解答 38
第3章 C 核心語言特性 41
3.1 面向?qū)ο缶幊獭?1
3.1.1 設(shè)計(jì)思想 42
3.1.2 實(shí)現(xiàn)原則 42
3.1.3 編碼準(zhǔn)則 44
3.1.4 實(shí)用技巧 46
3.1.5 面向?qū)ο缶幊绦〗Y(jié) 49
3.2 自動(dòng)類型推導(dǎo) 49
3.2.1 什么是自動(dòng)類型推導(dǎo) 50
3.2.2 auto關(guān)鍵字 52
3.2.3 decltype關(guān)鍵字 53
3.2.4 用好自動(dòng)類型推導(dǎo) 55
3.2.5 自動(dòng)類型推導(dǎo)小結(jié) 57
3.3 常量與變量 57
3.3.1 const/volatile關(guān)鍵字 57
3.3.2 const的使用方法 59
3.3.3 mutable關(guān)鍵字 62
3.3.4 constexpr關(guān)鍵字 63
3.3.5 常量與變量小結(jié) 64
3.4 異!65
3.4.1 為什么要有異!66
3.4.2 異常的用法 67
3.4.3 謹(jǐn)慎使用異!70
3.4.4 保證不拋出異!71
3.4.5 異常小結(jié) 72
3.5 函數(shù)式編程 72
3.5.1 關(guān)于函數(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 強(qiáng)類型枚舉 81
3.6.4 條件語句初始化 82
3.6.5 二進(jìn)制字面值 82
3.6.6 數(shù)字分位符 83
3.7 常見問題解答 83
第4章 C 標(biāo)準(zhǔn)庫(kù) 86
4.1 智能指針 86
4.1.1 智能指針簡(jiǎn)介 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 正則表達(dá)式 101
4.2.6 字符串小結(jié) 106
4.3 標(biāo)準(zhǔn)容器 107
4.3.1 容器簡(jiǎn)介 107
4.3.2 容器的特性 108
4.3.3 順序容器 108
4.3.4 有序容器 110
4.3.5 無序容器 112
4.3.6 標(biāo)準(zhǔn)容器小結(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 標(biāo)準(zhǔn)算法 123
4.5.1 算法簡(jiǎn)介 123
4.5.2 迭代器簡(jiǎn)介 125
4.5.3 遍歷算法 126
4.5.4 排序算法 128
4.5.5 查找算法 129
4.5.6 范圍算法 132
4.5.7 標(biāo)準(zhǔn)算法小結(jié) 135
4.6 線程并發(fā) 135
4.6.1 線程簡(jiǎn)介 136
4.6.2 單次調(diào)用 137
4.6.3 局部存儲(chǔ) 138
4.6.4 原子變量 139
4.6.5 線程接口 142
4.6.6 線程并發(fā)小結(jié) 145
4.7 常見問題解答 145
第5章 C 進(jìn)階技能 149
5.1 準(zhǔn)標(biāo)準(zhǔn)庫(kù) 149
5.1.1 字符串轉(zhuǎn)換 150
5.1.2 字符串算法 152
5.1.3 高精度計(jì)時(shí)器 155
5.1.4 準(zhǔn)標(biāo)準(zhǔn)庫(kù)小結(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)絡(luò)通信 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)絡(luò)通信小結(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 與設(shè)計(jì)模式 199
6.1 設(shè)計(jì)模式簡(jiǎn)介 199
6.2 設(shè)計(jì)原則簡(jiǎn)介 200
6.2.1 SOLID原則 201
6.2.2 DRY/KISS原則 203
6.3 解讀設(shè)計(jì)模式 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 應(yīng)用實(shí)例 211
7.1 項(xiàng)目設(shè)計(jì) 211
7.2 預(yù)備開發(fā) 212
7.2.1 核心頭文件 213
7.2.2 自旋鎖 213
7.2.3 網(wǎng)絡(luò)通信 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ù)存儲(chǔ)和統(tǒng)計(jì) 220
7.3.4 主服務(wù)器 222
7.4 測(cè)試驗(yàn)證 225
7.4.1 后端服務(wù)器 225
7.4.2 客戶端 226
7.4.3 運(yùn)行效果 227
7.5 小結(jié) 227
第8章 結(jié)束語 229
8.1 公正看待C 229
8.2 如何學(xué)習(xí)C 230
8.3 臨別贈(zèng)言 230
附錄A 經(jīng)典圖書推薦 232
A.1 《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》 232
A.2 《C 標(biāo)準(zhǔn)程序庫(kù)》 233
A.3 《C 語言的設(shè)計(jì)與演化》 233
A.4 《C Primer》 234
A.5 小結(jié) 234
附錄B 工作經(jīng)驗(yàn)分享 236
B.1 Linux 236
B.2 Vim 237
B.3 Git 239
B.4 GDB 239
附錄C 時(shí)間管理 241
C.1 工作時(shí)間的管理 241
C.2 工作小技巧 243
C.3 非工作時(shí)間的管理 243
C.4 小結(jié) 245