C程序設計新思維 第2版 C程序设计新思维(第2版)

本·克萊蒙 (Ben Klemens)

立即出貨 (庫存 < 4)

買這商品的人也買了...

商品描述

C語言已經有幾十年的歷史了。經過長時間的發展和普及,C語言的應用場景有了很大的變化,一些舊觀念應該被淡化或者不再被推薦。
本書展現了傳統C語言教科書所不具有相關技術。全書分為開發環境和語言兩個部分,從編譯、調試、測試、打包、版本控制等角度,以及指針、語法、文本、結構、面向對象編程、函數庫等方面,對C程序設計的核心知識進行查缺補漏和反思。本書鼓勵讀者放棄那些對大型機才有意義的舊習慣,拿起新的工具來使用這門與時俱進的簡潔語言。
本書適合有一定基礎的C程序員和C語言學習者閱讀,也適合想要深入理解C語言特性的讀者參考。

作者簡介

自從於加州理工學院獲得社會科學博士後,Ben Klemens就一直從事統計分析和人口的計算機輔助建模工作。
他的觀點是,寫代碼一定應該是趣味橫生的,並先後非常愉快地為布魯金斯學會、世界銀行、美國國家精神健康中心等機構寫過分析和建模代碼(主要是C代碼)。
他作為布魯金斯學會的非常駐研究員,與自由軟件基金會一道,做了很多工作來確保有創意的程序員擁有保留其作品使用權的權利。他目前為美國聯邦政府工作。

目錄大綱

第1部分開發環境

第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一些我喜歡的選項12 
1.3.2路徑13 
1.3.3運行時連接16 
1.4使用makefile 16 
1.4.1設定變量17 
1.4 .2規則20 
1.5以源文件的方式使用庫24 
1.6以源文件的方式使用庫(即使你的系統管理員不想叫你這麼做) 25 
1.7通過here來編譯C程序27 
1.7.1在命令行里包含頭文件27 
1.7.2統一的頭文件28 
1.7.3 here文檔29 
1.7.4從stdin中編譯30 

第2章調試、測試和文檔32 
2.1使用調試器32 
2.1.1調試的偵探故事34 
2.1. 2 GDB變量43 
2.1.3打印結構45 
2.2利用Valgrind檢查錯誤49
2.3單元測試51 
2.3.1把程序用作庫54 
2.3.2測試覆蓋55 
2.4錯誤檢查56 
2.4.1在錯誤中的用戶的角色?56 
2.4.2用戶工作的上下文環境58 
2.4.3如何返回錯誤信息60 
2.5編制文檔60 
2.5.1 Doxygen 61 
2.5.2用CWEB解釋代碼62 

第3章打包項目65 
3.1 shell 66 
3.1.1用shell命令的輸出來替換命令66 
3.1.2用shell的循環來處理一組文件68 
3.1.3針對文件的測試70 
3.1.4 fc 73 
3.2 makefile還是shell腳本75 
3.3用Autotools打包代碼77 
3.3.1一個Autotools的示例79 
3.3.2用makefile.am來描述makefile 82 
3.3.3配置腳本87 

第4章版本控制92 
4.1通過diff查看差異93 
4.2 Git的對象94 
4.3樹和它們的分支99 
4.3.1融合100 
4.3. 2遷移102 
4.4遠程版本庫103 

第5章協助開發106
5.1動態裝載106 
5.2流程109 
5.2.1為外來語言寫程序110 
5.2.2包裝函數110 
5.2.3跨越邊境的代理數據結構111 
5.2.4鏈接112 
5.3與Python一起工作113 
5.3.1編譯與連接114 
5.3.2 Automake的條件子目錄114 
5.3.3 Autotools支持下的Distutils 116 

第2部分語言

第6章玩轉指針121 
6.1自動、靜態和手工內存121 
6.2持久性的狀態變量125 
6.3不使用malloc的指針127 
6.3.1結構被複製,數組創建別名129 
6.3.2 malloc和內存操縱132 
6.3.3錯誤來源於星號133 
6.3.4你需要知道的各種指針運算134 
6.3.5將typedef作為一種教學工具137 

第7章教科書不應該再過多介紹的C語言語法139 
7.1不需要明確地從main函數返回139 
7.2讓聲明的位置更靈活140 
7.3減少類型轉換143 
7.4枚舉和字符串145 
7.5標籤、 goto、switch和break 147 
7.5.1探討goto 147
7.5.2 switch 150 
7.6被摒棄的float 151 
7.7比較無符號整型數154 
7.8安全的將字符串解析成數字154 

第8章那些C語言教科書經常不講解的語法158 
8.1營造健壯和繁盛的宏158 
8.1.1預處理器技巧162 
8.1.2測試宏166 
8.1.3避免頭文件重複包含168 
8.2 static和extern鏈接170 
8.3 const關鍵字173 
8.3.1名詞-形容詞形式174 
8.3.2壓力175 
8.3.3深度176 
8.3.4 char const **問題177
 
第9章簡單的文本處理180 
9.1使用asprintf,使字符串的處理不再那麼痛苦180 
9.1.1安全183 
9.1.2常量字符串184 
9.1.3用asprintf擴展字符串185 
9.1.4 strtok的讚歌187 
9.2 Unicode 192 
9.2.1 C代碼的編碼194 
9.2.2 Unicode函數庫195 
9.2.3示例代碼196
 
第10章更好的結構200 
10.1複合常量201 
10.2可變參數宏202
10.3安全終止的列表204 
10.4多列表205 
10.5 Foreach 206 
10.6函數的向量化207 
10.7指定的初始化器209 
10.8用零初始化數組和結構211 
10.9 typedef可以化繁為簡212 
10.10從函數返回多個數據項214 
10.11靈活的函數輸入218 
10.11.1把函數聲明為printf風格219 
10.11.2可選參數和命名參數221 
10.11.3使無聊的函數煥發光彩223 
10.12 void指針以及它所指向的結構229 
10.12.1具有通用輸入的函數229 
10.12.2通用結構234 

第11章C語言面向對象編程240 
11.1擴展結構和字典241 
11.1.1實現一個字典243 
11.1.2 C,更少的縫隙247 
11.2你結構中的函數253 
11.3作用域261 
11.4用操作符重載進行重載264 
11.5引用計數268 
11.5.1示例:一個子字符串對象268 
11.5.2一個基於代理的組構造模型273 
11.5.3結論280 

第12章多線程281 
12.1環境282
12.2 OpenMP 283 
12.2.1編譯OpenMP、pthreads和C原子(atom) 286 
12.2.2衝突287 
12.2.3映射縮減288 
12.2.4多任務289 
12.3線程本地290 
12.4共享資源292 
12.5 pthread 299 
12.6 C原子304 

第13章函數庫311 
13.1 GLib 311 
13.2 POSIX 312 
13.2.1解析正則表達式312 
13.2.2為巨大的數據集合使用mmap 317 
13.3 GNU科學計算庫320 
13.4 SQLite 322 
13.5 libxml和cURL 325 
附錄A C101 329 
後記348 
術語表349