本書通過16個主題,收錄了程序員應當遵守的128項基本編碼準則,涉及初期設計、間隔、縮進、標識符名稱、運算符使用等多個方面,并附有大量參考網址及文獻,幫助開發人員夯實基礎,從規范的編碼操作開始,培養良好的編碼習慣,助力未來技術成長。
具有多年一線程序員開發經驗,現為技術作家、信息架構師,從網絡、圖書、雜志等收集有價值的信息和知識。擔任程序員時,開發過面向雙機系統通信的API模塊,從COBOL到4th Dimension,使用過多種編程語言和開發工具。著有《我的PC攻防》《用GNU Linux走向成功》《C語言基礎核心原理》《保護好你的錢和信息》《一冊搞定C++編程》等。目前正在撰寫多種主題圖書,已出版多部譯著,并成立翻譯公司,致力于信息通信領域的翻譯。
第1章 基礎知識概述
1.1 編碼風格 2
1.2 編碼風格教育缺失 3
1.3 打磨編碼風格的時機 7
1.4 必須學習編碼風格的原因 9
1.5 編碼風格比數學或英語更重要 11
1.6 所有編程語言都需要編碼風格 12
1.7 選擇用C語言闡述編程風格的原因 14
1.8 編碼風格有益于編譯執行方式和混合執行方式 17
1.9 基于組件的軟件開發方式與編碼風格 20
1.10 碼農的力量不容小覷 23
1.11 將編碼慣例文檔化以統一應用 24
第2章 程序設計階段所需編碼準則
2.1 遵循最新標準 28
2.2 合理限制開發人員的規模 29
2.3 維護舊程序比開發新程序更常見 31
2.4 不要認為修改程序很容易 32
2.5 慎重采用新技術 34
2.6 不要采用RAF策略 36
第3章 間隔相關編碼準則
3.1 一行只寫一條語句 42
3.2 區分聲明語句和執行語句 44
3.3 區分段落 46
3.4 區分各種控制語句 50
3.5 區分各函數 54
3.6 運算符前后需留出空格 61
3.7 不要在一元運算符與操作數之間插入空格 63
3.8 分號前不要插入空格 63
3.9 不要濫用Tab鍵 64
3.10 逗號后必須插入一個空格 65
3.11 逗號后不要插入太多空格 65
3.12 變量初始化時的列對齊 66
3.13 一行只聲明一個變量 70
第4章 縮進相關編碼準則
4.1 大括號的位置 74
4.2 統一大括號的位置 77
4.3 內部代碼塊需要縮進 78
4.4 輸出部分需要縮進 81
4.5 不要毫無意義地縮進 84
4.6 保持縮進程度的一致性 86
4.7 選擇合適的縮進程度 87
4.8 不要編寫凸出形式的代碼 88
第5章 注釋相關編碼準則
5.1 多種注釋形態 92
5.2 區分單行注釋和注釋框 94
5.3 添加“變量字典編寫專用注釋” 98
5.4 向程序插入偽代碼 100
5.5 通過注釋標注程序目標 102
5.6 程序起始部分必須添加頭注釋 104
5.7 在等于運算符旁添加注釋 110
5.8 在大括號閉合處添加注釋 112
5.9 在函數內部添加詳細介紹函數的注釋 115
5.10 注釋標記原則 116
第6章 標識符名稱定義相關編碼準則 I
6.1 系統化定義變量名 118
6.2 用匈牙利表示法命名變量 119
6.3 用變量名前綴表示變量數據類型 120
6.4 用變量名前綴表示變量存儲類型 122
6.5 用函數名前綴表示函數功能 125
6.6 編寫個人專屬前綴 127
第7章 標識符名稱定義相關編碼準則 II
7.1 用有意義的名稱命名 130
7.2 不要使用相似的變量名 131
7.3 在不影響含義的前提下盡可能簡短命名 133
7.4 用下劃線和大小寫區分較長變量名 135
7.5 變量名不要以下劃線開始 136
7.6 不要過度使用下劃線 137
7.7 合理使用大小寫命名標識符 139
7.8 不要濫用大小寫區分 I 141
7.9 不要濫用大小寫區分 II 142
7.10 不能用相同名稱同時命名類和變量 143
7.11 用大寫字母表示變量名中需要強調的部分 144
第8章 運算符相關編碼準則
8.1 恰當應用條件運算符有助于提高可讀性 146
8.2 不要憑借運算符優先級排列算式 147
8.3 指針運算符應該緊接變量名 148
8.4 慎選移位運算,多用算術運算 150
8.5 不要追求極端效率 151
第9章 編寫清晰代碼所需編碼準則
9.1 不要投機取巧,應致力于編寫清晰易懂的程序 154
9.2 切忌混淆while語句中關系運算符和賦值運算符的優先級 156
9.3 不要進行隱式“非零測試” 158
9.4 不要在條件表達式中使用賦值語句 159
9.5 避免產生副作用 161
9.6 函數原型中也要標注參數的數據類型 164
9.7 形式參數也需要命名 166
9.8 必須標注返回值的數據類型 168
9.9 留意結果值 169
9.10 在for語句等條件表達式中謹慎運算 171
9.11 大量使用冗余括號 172
9.12 如果else語句使用大括號,那么if語句也應該使用 175
9.13 函數末尾務必編寫return語句 176
第10章 編寫可移植代碼所需編碼準則
10.1 文件名不超過14個字符 178
10.2 不要在文件名中使用特殊字符 180
10.3 利用條件編譯提高可移植性 181
10.4 了解編譯器的限制 183
10.5 需考慮數據類型大小可能變化 185
10.6 不要指定絕對路徑 186
10.7 可移植性和高效性二選一 187
10.8 用數組代替指針以提高可移植性 188
10.9 選擇可移植性更好的編程語言 189
10.10 不要插入低級語言編寫的代碼 190
第11章 編寫精確代碼所需編碼準則
11.1 計算機并不如想象得那么精確 192
11.2 需要進行精確計算時避開浮點數運算 193
11.3 double型比float型更適合精確計算 194
11.4 確認整數型大小 197
11.5 必須明確計算單位 198
11.6 特別留意除法運算 200
11.7 盡量避免數據類型轉換 203
11.8 精通編程語言的語法 205
11.9 留意可能出現的非線性計算結果 206
第12章 提升性能所需編碼準則
12.1 重視性能,限制輸出 210
12.2 用簡單形式改寫運算表達式 211
12.3 需要高效處理大文件時應使用二進制文件 212
12.4 了解并使用壓縮/未壓縮結構體優缺點 213
12.5 根據運行環境選擇編程語言 216
12.6 根據情況選擇手段 218
12.7 選擇更優秀的數據結構 219
第13章 編寫易于理解的代碼所需編碼準則
13.1 不要使用goto語句 222
13.2 不要替換C語言組成要素 224
13.3 縮短過長數據類型名稱 226
13.4 使用if語句而非三元運算符 229
13.5 數組維數應限制在三維之內 230
13.6 考慮驅動函數main函數的作用 231
13.7 將常量替換為符號常量或const形態常量 233
13.8 考慮變量聲明部分的順序 234
13.9 盡可能不使用全局變量 236
13.10 遵循KISS原則 237
第14章 用戶接口處理相關編碼準則
14.1 確保保存輸入值的變量足夠大 240
14.2 轉換說明符和參數個數應保持一致 241
14.3 使用fgets()和sscanf()函數而非scanf()函數 243
14.4 使用fflush()函數清空標準輸入/輸出設備緩沖 245
第15章 編寫零漏洞代碼所需編碼準則
15.1 數組下標應從0開始 252
15.2 置換字符串時必須使用括號 254
15.3 文件必須有開就有關 255
15.4 不要無視編譯器的警告錯誤 259
15.5 掌握并在編碼時防止運行時錯誤 260
15.6 用靜態變量聲明大數組 265
15.7 預留足夠大的存儲空間 267
15.8 注意信息交換引發的涌現效果 268
第16章 提升生產效率所需編碼準則
16.1 在對立關系中事先確定側重于哪一方 272
16.2 慎重采用最新工具 273
16.3 記住所有標準庫 274
16.4 最大程度劃分模塊 274
16.5 明確區分術語 276
16.6 明確區分結構體、枚舉體、共用體 277
16.7 明確區分概念 278
16.8 明確區分對象、類、實例 279
附錄
參考網站及搜索方法 281
主要參考文獻 288
后記I:從“圖書出版”角度解讀軟件開發 289
后記 II: 從碼農到程序員 297