《C專家編程》展示了優(yōu)秀的C程序員所使用的編碼技巧,并專門開辟了一章對C++的基礎(chǔ)知識進行了介紹。
《C專家編程》對C的歷史、語言特性、聲明、數(shù)組、指針、鏈接、運行時、內(nèi)存以及如何進一步學(xué)習(xí)C++等問題進行了細致的講解和深入的分析。本書擷取幾十個實例進行講解,對C程序員具有非常高的實用價值。
《C專家編程》可以幫助有一定經(jīng)驗的C程序員成為C編程方面的專家;對于C語言功底深厚的程序員,本書可以幫助他們站在C的高度了解和學(xué)習(xí)C++。
這是一本非常與眾不同的C語言圖書,本書采用輕松、對話式的方式,介紹了作者在實踐經(jīng)驗中總結(jié)出的許多令人吃驚的案例:
將太空探測器炸毀到金星的軟件;
能關(guān)閉整個AT&T電話系統(tǒng)的C語言bug;
C程序員工作面試的秘密;
程序員為什么分不清萬圣節(jié)和圣誕節(jié);
一個完整的BASIC解釋器的C代碼。
本書揭示了世界上卓-越的C程序員使用的編碼技術(shù)。本書盡管以C語言為主題,但還是對C++進行了簡單介紹。C程序員無須花費數(shù)周的時間就可以理解這些C++知識。
本書涵蓋了IBM和UNIX系統(tǒng),真正做到了C語言學(xué)習(xí)的寓教于樂,對于想要了解更多C語言實現(xiàn)、實用技巧以及C語言奇聞異事的讀者來說,本書是必備讀物。
Peter van der Linden,Sun公司編譯器和OS核心開發(fā)團隊成員,世界知名的專家級C程序員,擁有多年的C開發(fā)實戰(zhàn)經(jīng)驗,對C/C++語言有深入理解。
第 1章 C:穿越時空的迷霧 1
1.1 C語言的史前階段 1
1.2 C語言的早期體驗 4
1.3 標(biāo)準(zhǔn)I/O庫和C預(yù)處理器 5
1.4 K&R C 8
1.5 今日之ANSI C 10
1.6 它很棒,但它符合標(biāo)準(zhǔn)嗎 12
1.7 編譯限制 14
1.8 ANSI C標(biāo)準(zhǔn)的結(jié)構(gòu) 15
1.9 閱讀ANSI C標(biāo)準(zhǔn),尋找樂趣和裨益 18
1.10 “安靜的改變”究竟有多少安靜 22
1.11 輕松一下——由編譯器定義的Pragmas效果 25
第 2章 這不是Bug,而是語言特性 27
2.1 這關(guān)語言特性何事,在Fortran里這就是Bug呀 27
2.2 多做之過 29
2.3 誤做之過 36
2.4 少做之過 43
2.5 輕松一下——有些特性確實就是Bug 51
第3章 分析C語言的聲明 53
3.1 只有編譯器才會喜歡的語法 54
3.2 聲明是如何形成的 56
3.3 優(yōu)先級規(guī)則 61
3.4 通過圖表分析C語言的聲明 63
3.5 typedef可以成為你的朋友 65
3.6 typedef int x[10]和#define x int[10]的區(qū)別 66
3.7 typedef struct foo{ ... foo; }的含義 67
3.8 理解所有分析過程的代碼段 69
3.9 輕松一下——驅(qū)動物理實體的軟件 71
第4章 令人震驚的事實:數(shù)組和指針并不相同 79
4.1 數(shù)組并非指針 79
4.2 我的代碼為什么無法運行 79
4.3 什么是聲明,什么是定義 80
4.4 使聲明與定義相匹配 84
4.5 數(shù)組和指針的其他區(qū)別 84
4.6 輕松一下——回文的樂趣 85
第5章 對鏈接的思考 89
5.1 函數(shù)庫、鏈接和載入 89
5.2 動態(tài)鏈接的優(yōu)點 92
5.3 函數(shù)庫鏈接的5個特殊秘密 95
5.4 警惕Interpositioning 99
5.5 產(chǎn)生鏈接器報告文件 104
5.6 輕松一下——看看誰在說話:挑戰(zhàn)Turing測驗 105
第6章 運動的詩章:運行時數(shù)據(jù)結(jié)構(gòu) 111
6.1 a.out及其傳說 112
6.2 段 113
6.3 操作系統(tǒng)在a.out文件里干了些什么 115
6.4 C語言運行時系統(tǒng)在a.out里干了些什么 117
6.5 當(dāng)函數(shù)被調(diào)用時發(fā)生了什么:過程活動記錄 119
6.6 auto和static關(guān)鍵字 123
6.7 控制線程 124
6.8 setjmp和longjmp 124
6.9 UNIX中的堆棧段 126
6.10 MS-DOS中的堆棧段 126
6.11 有用的C語言工具 127
6.12 輕松一下——卡耐基·梅隆大學(xué)的編程難題 130
6.13 只適用于高級學(xué)員閱讀的材料 132
第7章 對內(nèi)存的思考 133
7.1 Intel 80x86系列 133
7.2 Intel 80x86內(nèi)存模型以及它的工作原理 137
7.3 虛擬內(nèi)存 141
7.4 cache存儲器 144
7.5 數(shù)據(jù)段和堆 148
7.6 內(nèi)存泄漏 149
7.7 總線錯誤 153
7.8 輕松一下——“Thing King”和“頁面游戲” 159
第8章 為什么程序員無法分清萬圣節(jié)和圣誕節(jié) 163
8.1 Portzebie度量衡系統(tǒng) 163
8.2 根據(jù)位模式構(gòu)筑圖形 164
8.3 在等待時類型發(fā)生了變化 166
8.4 原型之痛 168
8.5 原型在什么地方會失敗 170
8.6 不需要按回車鍵就能得到一個字符 173
8.7 用C語言實現(xiàn)有限狀態(tài)機 177
8.8 軟件比硬件更困難 178
8.9 如何進行強制類型轉(zhuǎn)換,為何要進行類型強制轉(zhuǎn)換 181
8.10 輕松一下——國際C語言混亂代碼大賽 183
第9章 再論數(shù)組 193
9.1 什么時候數(shù)組與指針相同 193
9.2 為什么會發(fā)生混淆 194
9.3 為什么C語言把數(shù)組形參當(dāng)作指針 199
9.4 數(shù)組片段的下標(biāo) 202
9.5 數(shù)組和指針可交換性的總結(jié) 203
9.6 C語言的多維數(shù)組 203
9.7 輕松一下——軟件/硬件平衡 209
第 10章 再論指針 213
10.1 多維數(shù)組的內(nèi)存布局 213
10.2 指針數(shù)組就是Iliffe向量 214
10.3 在鋸齒狀數(shù)組上使用指針 217
10.4 向函數(shù)傳遞一個一維數(shù)組 220
10.5 使用指針向函數(shù)傳遞一個多維數(shù)組 221
10.6 使用指針從函數(shù)返回一個數(shù)組 224
10.7 使用指針創(chuàng)建和使用動態(tài)數(shù)組 226
10.8 輕松一下——程序檢驗的限制 231
第 11章 你懂得C,所以C++不在話下 235
11.1 初識OOP 235
11.2 抽象——取事物的本質(zhì)特性 237
11.3 封裝——把相關(guān)的類型、數(shù)據(jù)和函數(shù)組合在一起 238
11.4 展示一些類——用戶定義類型享有和預(yù)定義類型一樣的權(quán)限 239
11.5 訪問控制 240
11.6 聲明 241
11.7 如何調(diào)用成員函數(shù) 243
11.8 繼承——復(fù)用已經(jīng)定義的操作 245
11.9 多重繼承——從兩個或更多的基類派生 249
11.10 重載——作用于不同類型的同一操作具有相同的名字 250
11.11 C++如何進行操作符重載 250
11.12 C++的輸入/輸出(I/O) 251
11.13 多態(tài)——運行時綁定 252
11.14 解釋 253
11.15 C++如何表現(xiàn)多態(tài) 254
11.16 新奇玩意兒——多態(tài) 255
11.17 C++的其他要點 256
11.18 如果我的目標(biāo)是那里,我不會從這里起步 257
11.19 它或許過于復(fù)雜,但卻是唯一可行的方案 259
11.20 輕松一下——死亡計算機協(xié)會 263
11.21 更多閱讀材料 264
附錄A 程序員工作面試的秘密 265