第1章 導論 1
1.1 為何以及如何閱讀代碼 2
1.1.1 將代碼作為文獻 2
1.1.2 將代碼作為范例 5
1.1.3 維護 6
1.1.4 演進 6
1.1.5 重用 8
1.1.6 檢查 8
1.2 如何閱讀本書 9
1.2.1 排版約定 9
1.2.2 圖表 11
1.2.3 練習 12
1.2.4 輔助材料 13
1.2.5 工具 13
1.2.6 提綱 13
1.2.7 關于“偉大語言”的爭論 14
進階閱讀 15
第2章 基本編程元素 17
2.1 一個完整的程序 17
2.2 函數(shù)和全局變量 22
2.3 while循環(huán)、條件和塊 26
2.4 switch語句 29
2.5 for循環(huán) 31
2.6 break和continue語句 34
2.7 字符和布爾表達式 36
2.8 goto語句 39
2.9 局部重構 41
2.10 do循環(huán)和整數(shù)表達式 46
2.11 再論控制結構 49
進階閱讀 55
第3章 高級C數(shù)據(jù)類型 57
3.1 指針 57
3.1.1 鏈式數(shù)據(jù)結構 58
3.1.2 數(shù)據(jù)結構的動態(tài)分配 58
3.1.3 引用調用 59
3.1.4 數(shù)據(jù)元素的訪問 60
3.1.5 數(shù)組類型的參數(shù)和返回結果 61
3.1.6 函數(shù)指針 63
3.1.7 用做別名的指針 65
3.1.8 指針和字符串 67
3.1.9 直接內存訪問 69
3.2 結構體 70
3.2.1 組合數(shù)據(jù)元素 70
3.2.2 從函數(shù)中返回多個數(shù)據(jù)元素 71
3.2.3 映射數(shù)據(jù)的組織方式 71
3.2.4 以面向對象方式編程 73
3.3 聯(lián)合體 75
3.3.1 有效利用內存空間 75
3.3.2 實現(xiàn)多態(tài) 76
3.3.3 不同內部表征的訪問 77
3.4 動態(tài)內存分配 79
3.4.1 空閑內存管理 81
3.4.2 包含動態(tài)分配數(shù)組的結構體 83
3.5 typedef聲明 85
進階閱讀 87
第4章 C數(shù)據(jù)結構 89
4.1 向量 90
4.2 矩陣和表 94
4.3 棧 98
4.4 隊列 100
4.5 映射 103
4.5.1 散列表 106
4.6 集合 108
4.7 鏈表 109
4.8 樹 117
4.9 圖 122
4.9.1 節(jié)點存儲 122
4.9.2 邊的表示 124
4.9.3邊的存儲 127
4.9.4 圖的屬性 129
4.9.5 隱含結構 129
4.9.6 其他表示方法 130
進階閱讀 130
第5章 高級控制流程 131
5.1 遞歸 131
5.2 異常機制 137
5.3 并行性 141
5.3.1 硬件和軟件的并行性 142
5.3.2 控制模型 143
5.3.3 線程實現(xiàn) 148
5.4 信號 151
5.5 非局部跳轉 154
5.6 宏替換 157
進階閱讀 162
第6章 應對大型項目 163
6.1 設計和實現(xiàn)技術 163
6.2 項目的組織 165
6.3 編譯過程與makefile文件 172
6.4 配置 179
6.5 版本控制 184
6.6 項目專用工具 191
6.7 測試 196
進階閱讀 203
第7章 編碼規(guī)范和約定 205
7.1 文件的名稱和組織 206
7.2 縮進 208
7.3 格式編排 210
7.4 命名約定 213
7.5 編程實踐 217
7.6 過程規(guī)范 219
進階閱讀 220
第8章 文檔 221
8.1 文檔類型 221
8.2 閱讀文檔 222
8.3 文檔中存在的問題 234
8.4 其他文檔來源 236
8.5 常見的開源文檔格式 239
進階閱讀 245
第9章 架構 414
9.1 系統(tǒng)結構 248
9.1.1 集中式存儲庫和分布式方法 248
9.1.2 數(shù)據(jù)流架構 252
9.1.3 面向對象結構 254
9.1.4 分層架構 257
9.1.5 層次 260
9.1.6 切片 261
9.2 控制模型 263
9.2.1 事件驅動系統(tǒng) 263
9.2.2 系統(tǒng)管理器 266
9.2.3 狀態(tài)轉移 268
9.3 元素包裝 270
9.3.1 模塊 270
9.3.2 命名空間 272
9.3.3 對象 276
9.3.4 泛型實現(xiàn) 287
9.3.5 抽象數(shù)據(jù)類型 292
9.3.6 庫 292
9.3.7 進程和過濾器 296
9.3.8 組件 297
9.3.9 數(shù)據(jù)存儲庫 299
9.4 架構重用 301
9.4.1 框架 301
9.4.2 代碼向導 302
9.4.3 設計模式 303
9.4.4 領域專有的架構 305
進階閱讀 308
第10章 代碼閱讀工具 311
10.1 正則表達式 312
10.2 用編輯器瀏覽代碼 314
10.3 用grep搜索代碼 317
10.4 找出文件的差異 325
10.5 開發(fā)自用工具 326
10.6 借助編譯器閱讀代碼 329
10.7 代碼瀏覽器與美化器 333
10.8 運行時工具 338
10.9 非軟件工具 342
可用工具與進階讀物 343
第11章 完整示例 345
11.1 概況 345
11.2 攻克計劃 347
11.3 代碼重用 348
11.4 測試與調試 354
11.5 文檔 361
11.6 觀察報告 362
附錄A 源代碼致謝人員名單 363
附錄B 源代碼致謝人員名單 363
附錄C 源代碼致謝人員名單 363