C 編程語(yǔ)言,堪稱(chēng)編程語(yǔ)言中的全能選手,它不僅功能強(qiáng)大、靈活,而且適用場(chǎng)景非常廣泛。但是要想真正掌握 C ,其技術(shù)門(mén)檻往往較高,這也使新手學(xué)起來(lái)困難,甚至連老手也覺(jué)得用好它并不容易。
本書(shū)根據(jù)作者 20 多年編寫(xiě) C 代碼的實(shí)踐經(jīng)驗(yàn),精選出了現(xiàn)代 C 中好用且實(shí)用的若干特性,通過(guò)代碼演示實(shí)戰(zhàn)技巧,幫助讀者輕松地看懂、學(xué)會(huì) C 編程。本書(shū)從開(kāi)發(fā)環(huán)境、開(kāi)發(fā)綜述、核心語(yǔ)言特性、標(biāo)準(zhǔn)庫(kù)、進(jìn)階技能、設(shè)計(jì)模式、應(yīng)用實(shí)例等方面深入淺出地介紹了 C 實(shí)戰(zhàn)技巧。除此之外,本書(shū)還囊括了作者多年的開(kāi)發(fā)心得,例如圖書(shū)推薦、工作經(jīng)驗(yàn)分享、時(shí)間管理方法等特色內(nèi)容。
本書(shū)并不是一本入門(mén)教程,比較適合學(xué)過(guò) C 基礎(chǔ)知識(shí),仍缺乏高效的 C 實(shí)戰(zhàn)技巧的讀者閱讀。通過(guò)閱讀本書(shū),讀者可以深入洞悉 C 核心知識(shí),進(jìn)一步夯實(shí)實(shí)戰(zhàn)技能,開(kāi)拓編程思路。
1.本書(shū)根據(jù)作者編寫(xiě)C 代碼20多年的實(shí)踐經(jīng)驗(yàn),精選出了現(xiàn)代 C 中好用且實(shí)用的特性,通過(guò)代碼演示實(shí)戰(zhàn)技巧,幫助讀者輕松地看懂、學(xué)會(huì) C 編程;
2.本書(shū)內(nèi)容豐富,從開(kāi)發(fā)環(huán)境、開(kāi)發(fā)綜述、核心語(yǔ)言特性、標(biāo)準(zhǔn)庫(kù)、進(jìn)階技能、設(shè)計(jì)模式、應(yīng)用實(shí)例等方面深入淺出地介紹了 C 實(shí)戰(zhàn)技巧;
3.此外本書(shū)還總結(jié)了作者多年的開(kāi)發(fā)軟技能,比如開(kāi)發(fā)心得和工作經(jīng)驗(yàn)分享,讓你在代碼之外,幫助你更好地經(jīng)營(yíng)自己的程序員生涯;
4.本書(shū)不僅適合入門(mén)學(xué)習(xí),同樣適用于掌握一定C 基礎(chǔ)知識(shí),想提升實(shí)戰(zhàn)技巧的讀者進(jìn)一步夯實(shí)技能,開(kāi)拓編程思路。
羅劍鋒,網(wǎng)名Chrono,前奇虎360技術(shù)專(zhuān)業(yè)人士,Nginx/OpenResty開(kāi)源項(xiàng)目貢獻(xiàn)者,也是極客時(shí)間《透視HTTP協(xié)議》等專(zhuān)欄的作者。他熟悉各種網(wǎng)絡(luò)應(yīng)用協(xié)議,專(zhuān)注于C/C 、Linux、高性能編程等領(lǐng)域,著有《C 11/14 高級(jí)編程》《Boost程序庫(kù)完全開(kāi)發(fā)指南》《Nginx 完全開(kāi)發(fā)指南》《OpenResty 完全開(kāi)發(fā)指南》等圖書(shū)。
第 1章 C 開(kāi)發(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 常見(jiàn)問(wèn)題解答 7
第 2章 C 開(kāi)發(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 常見(jiàn)問(wèn)題解答 38
第3章 C 核心語(yǔ)言特性 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)類(lèi)型推導(dǎo) 49
3.2.1 什么是自動(dòng)類(lèi)型推導(dǎo) 50
3.2.2 auto關(guān)鍵字 52
3.2.3 decltype關(guān)鍵字 53
3.2.4 用好自動(dòng)類(lèi)型推導(dǎo) 55
3.2.5 自動(dòng)類(lèi)型推導(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)類(lèi)型枚舉 81
3.6.4 條件語(yǔ)句初始化 82
3.6.5 二進(jìn)制字面值 82
3.6.6 數(shù)字分位符 83
3.7 常見(jiàn)問(wèn)題解答 83
第4章 C 標(biāo)準(zhǔn)庫(kù) 86
4.1 智能指針 86
4.1.1 智能指針簡(jiǎn)介 86
4.1.2 專(zhuān)有指針 87
4.1.3 共享指針 89
4.1.4 弱引用指針 91
4.1.5 智能指針小結(jié) 93
4.2 字符串 94
4.2.1 字符串類(lèi)型 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 無(wú)序容器 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 線(xiàn)程并發(fā) 135
4.6.1 線(xiàn)程簡(jiǎn)介 136
4.6.2 單次調(diào)用 137
4.6.3 局部存儲(chǔ) 138
4.6.4 原子變量 139
4.6.5 線(xiàn)程接口 142
4.6.6 線(xiàn)程并發(fā)小結(jié) 145
4.7 常見(jiàn)問(wèn)題解答 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 多語(yǔ)言混合編程 179
5.4.1 Python 180
5.4.2 Lua 184
5.4.3 多語(yǔ)言混合編程小結(jié) 187
5.5 性能分析 188
5.5.1 外部查看 188
5.5.2 內(nèi)部分析 192
5.5.3 性能分析小結(jié) 195
5.6 常見(jiàn)問(wèn)題解答 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ù)備開(kāi)發(fā) 212
7.2.1 核心頭文件 213
7.2.2 自旋鎖 213
7.2.3 網(wǎng)絡(luò)通信 215
7.2.4 配置解析 216
7.3 正式開(kāi)發(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 客戶(hù)端 226
7.4.3 運(yùn)行效果 227
7.5 小結(jié) 227
第8章 結(jié)束語(yǔ) 229
8.1 公正看待C 229
8.2 如何學(xué)習(xí)C 230
8.3 臨別贈(zèng)言 230
附錄A 經(jīng)典圖書(shū)推薦 232
A.1 《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》 232
A.2 《C 標(biāo)準(zhǔn)程序庫(kù)》 233
A.3 《C 語(yǔ)言的設(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