圖書簡介
《C程式設計新思維》展現了傳統C教科書所不具有的最新的相關技術。全書分為開發環境和語言兩個部分,分別從編譯、調試、測試、打包、版本控制等角度,以及指針、語法、文本、結構、面向對象編程、庫等主題,對C程式設計的核心知識進行查缺補漏和反思。本書鼓勵讀者放棄那些對大型機才有意義的舊習慣,拿起新的工具來使用這門與時俱進的簡潔語言。
目錄
第 一部分 開發環境
第 1章 準備方便的編譯環境 3
1.1 使用包管理器 4
1.2 在Windows下編譯C 6
1.2.1 Windows中的POSIX環境 7
1.2.2 在POSIX下編譯C 8
1.2.3 不在POSIX環境中編譯C 9
1.3 庫的路徑 10
1.3.1 一些我喜歡的選項 11
1.3.2 路徑 13
1.3.3 運行時連線 15
1.4 使用Makefile 16
1.4.1 設定變數 17
1.4.2 規則 19
1.5 以源檔案利用庫 23
1.6 以源檔案利用庫(即使你的系統管理員不想叫你這么做) 24
1.7 通過本地文檔來編譯C程式 26
1.7.1 在命令行里包含頭檔案 26
1.7.2 統一的頭檔案 27
1.7.3 嵌入文檔 28
1.7.4 從stdin中編譯 29
第 2章 調試、測試和文檔 31
2.1 使用調試器 31
2.1.1 GDB變數 35
2.1.2 列印結構 36
2.2 利用Valgrind檢查錯誤 40
2.3 單元測試 41
2.3.1 把程式用作庫 44
2.3.2 測試覆蓋 45
2.4 編制文檔 46
2.4.1 Doxygen 46
2.4.2 用CWEB解釋代碼 48
2.5 錯誤檢查 50
2.5.1 在錯誤中的用戶參與是什麼 50
2.5.2 用戶工作的上下文環境 52
2.5.3 如何返回錯誤信息 53
第3章 打包項目 55
3.1 Shell 56
3.1.1 用shell命令的輸出來替換命令 56
3.1.2 用shell的循環來處理一組檔案 58
3.1.3 針對檔案的測試 60
3.1.4 fc 62
3.2 makefile還是shell腳本 64
3.3 用Autotools打包代碼 67
3.3.1 一個Autotools的示例 68
3.3.2 用makefile.am來描述makefile 71
3.3.3 配置腳本 76
第4章 版本控制 80
4.1 通過diff查看差異 81
4.2 Git的對象 82
4.3 樹和它們的枝 86
4.3.1融合 88
4.3.2 遷移 89
4.4 遠程版本庫 90
第5章 和諧共處 93
5.1 過程 93
5.1.1 作為外來語言寫程式 93
5.1.2 包裝函式 94
5.1.3 跨越邊境的代理數據結構 94
5.1.4 連線 96
5.2 與Python一起工作 96
5.2.1 編譯與連線 98
5.2.2 Automake的條件子目錄 98
5.2.3 Autotools支持下的Distutils 100
第 二部分 語言
第6章 玩轉指針 106
6.1 自動、靜態和手工記憶體 106
6.2 持久性的狀態變數 109
6.3 不使用malloc的指針 110
6.3.1 結構被複製,數組創建別名 111
6.3.2 malloc和記憶體操縱 114
6.3.3 錯誤來源於星號 115
6.3.4 你需要知道的各種指針運算 116
第7章 可以忽略的C語法 121
7.1 不需要明確地從main函式返回 122
7.2 讓聲明流動 122
在運行時設定數組的長度 124
7.3 減少類型轉換 125
7.4 枚舉和字元串 126
7.5 標籤、goto、switch和break 128
7.5.1 考慮goto 129
7.5.2 switch 130
7.6 被摒棄的float 132
第8章 障礙和機遇 136
8.1 營造健壯和繁盛的宏 136
預處理器技巧 140
8.2 static和extern連結 143
只在頭檔案中聲明外部連結的元素 145
8.3 const關鍵字 147
8.3.1 名詞-形容詞形式 148
8.3.2 壓力 149
8.3.3 深度 150
8.3.4 char const **問題 150
第9章 文本 154
9.1 使用asprintf,使字元串的處理不再痛苦 154
9.1.1 安全 156
9.1.2 常量字元串 156
9.1.3 用asprintf擴展字元串 158
9.1.4 strtok的讚歌 159
9.2 Unicode 163
9.2.1 C代碼的編碼 165
9.2.2 Unicode函式館 167
9.2.3 示例代碼 168
第 10章 更好的結構 171
10.1 複合文字 172
通過複合文字進行初始化 173
10.2 可變參數宏 173
10.3 安全終止的列表 175
10.4 Foreach 176
10.5 函式的向量化 176
10.6 指定的初始化值 178
10.7 用零初始化數組和結構 180
10.8 typedef可以化繁為簡 181
10.9 從函式返回多個數據項 183
10.10 靈活的函式輸入 187
10.10.1 把函式聲明為printf風格 187
10.10.2 可選參數和命名參數 189
10.10.3 使無聊的函式煥發光彩 191
10.11 void指針以及它所指向的結構 197
10.11.1 具有通用輸入的函式 197
10.11.2 通用結構 201
第 11章 C語言的面向對象編程 206
11.1 你所不明白的(以及為什麼你不能不明白) 207
11.1.1 作用域 207
11.1.2 用操作符重載進行重載 210
11.2 擴展結構和字典 214
11.2.1 擴展一個結構 215
11.2.2 實現一個字典 219
11.2.3 基於指向對象的指針編碼 223