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