個(gè)人愚見(jiàn),譚浩強(qiáng)的書(shū)并不是很好,至少?gòu)拇a風(fēng)格和使用不等寬字體排版上來(lái)說(shuō)。轉(zhuǎn)載一篇文章:
C程序設(shè)計(jì)之四書(shū)五經(jīng)
引言
自從Dennis M.Ritchie于1973年設(shè)計(jì)并實(shí)現(xiàn)C語(yǔ)言以來(lái),計(jì)算機(jī)程序設(shè)計(jì)領(lǐng)域已經(jīng)發(fā)生了巨大的變化。以C語(yǔ)言為根基的C++、Java和C#等面向?qū)ο笳Z(yǔ)言相繼誕生,并在各自領(lǐng)域大獲成功。今天,C及其后裔幾乎統(tǒng)治了計(jì)算機(jī)程序設(shè)計(jì)世界。可以這么說(shuō),C語(yǔ)言的誕生是現(xiàn)代程序語(yǔ)言革命的起點(diǎn),它改變了程序設(shè)計(jì)語(yǔ)言發(fā)展的軌跡,是程序設(shè)計(jì)語(yǔ)言發(fā)展史中的一個(gè)里程碑。
然而,C并不僅僅是其他語(yǔ)言的起點(diǎn)和基礎(chǔ),否則它早已成為程序設(shè)計(jì)語(yǔ)言發(fā)展過(guò)程中又一個(gè)被遺棄者。和當(dāng)初發(fā)明時(shí)一樣,C語(yǔ)言今天依然至關(guān)重要。它的表達(dá)力、效率、簡(jiǎn)練、緊湊、對(duì)機(jī)器的最終控制以及跨平臺(tái)的高度移植性,使其在系統(tǒng)編程、嵌入式編程等領(lǐng)域一直占據(jù)著統(tǒng)治地位,而C99標(biāo)準(zhǔn)的制訂則再一次使C語(yǔ)言煥發(fā)出新的活力。下文介紹C程序設(shè)計(jì)領(lǐng)域中的幾本好書(shū),其中一些堪稱(chēng)經(jīng)典。
1. Brian W.Kernighan, Dennis M.Ritchie,《C程序設(shè)計(jì)語(yǔ)言》,機(jī)械工業(yè)出版社
這是迄今為止在所有程序設(shè)計(jì)語(yǔ)言書(shū)籍中最廣受尊敬的一部經(jīng)典,是任何一名C程序員的必讀之作。因?yàn)槌鲎訡語(yǔ)言的設(shè)計(jì)者Dennis M.Ritchie和著名的計(jì)算機(jī)科學(xué)家Brian W.Kernighan之手,它被昵稱(chēng)為“K&R C”。是它首先引入了“Hello World!”程序,這個(gè)程序幾乎成了后來(lái)任何一本入門(mén)性程序設(shè)計(jì)語(yǔ)言書(shū)籍中的第一個(gè)例子。
如同C語(yǔ)言本身簡(jiǎn)潔緊湊而極具威力一樣,這本書(shū)輕薄短小而極富張力。通過(guò)簡(jiǎn)潔的描述和典型的示例,它全面、系統(tǒng)、準(zhǔn)確地講述了C語(yǔ)言的各個(gè)特性以及C程序設(shè)計(jì)的基本方法,內(nèi)容涵蓋基本概念、類(lèi)型和表達(dá)式、控制流、函數(shù)與程序結(jié)構(gòu)、指針與數(shù)組、結(jié)構(gòu)、輸入與輸出、UNIX系統(tǒng)接口以及標(biāo)準(zhǔn)庫(kù)等內(nèi)容。
簡(jiǎn)潔清晰是這本書(shū)最大的特色。這本小書(shū)可以教給你許多比它厚幾倍的“大部頭”的知識(shí)。我認(rèn)為那些動(dòng)輒洋洋灑灑拼湊出好幾百頁(yè)乃至上千頁(yè)的技術(shù)作者應(yīng)該好好向K&R學(xué)一學(xué)。對(duì)于中、高級(jí)程序員而言,如果希望迅速獲得C語(yǔ)言的嚴(yán)肅知識(shí)而又不愿意多花費(fèi)哪怕一丁點(diǎn)時(shí)間,這本書(shū)就是首選。
順便說(shuō)一句,這本書(shū)的索引制作非常出色,極具實(shí)用價(jià)值,這可能首先要?dú)w功于正文部分的簡(jiǎn)明扼要。此外,盡管它看上去很像一本教程,但其實(shí)更是一本寫(xiě)給專(zhuān)業(yè)程序員的指南。如果你不具備任何其他語(yǔ)言程序設(shè)計(jì)背景或基本的C語(yǔ)言知識(shí),這本書(shū)也許并不適合用作你的C語(yǔ)言啟蒙讀物。
2. Perter Van Der LinDen,《C專(zhuān)家編程》,人民郵電出版社
C語(yǔ)言是嚴(yán)肅的程序員語(yǔ)言,但這并不意味著C語(yǔ)言書(shū)籍必須板著面孔說(shuō)教。在這本被C程序員昵稱(chēng)為“魚(yú)書(shū)”(封面上有一條“丑陋的”腔棘魚(yú))的著作中,作為SUN公司編譯器和操作系統(tǒng)核心開(kāi)發(fā)組成員之一,Peter淋漓盡致地展示了其深厚的技術(shù)沉淀、豐富的項(xiàng)目經(jīng)驗(yàn)、高超的寫(xiě)作技巧以及招牌式的幽默。在這部作品中,作者以流暢的文字、詼諧的筆法將逸聞典故、智慧和幽默自然地融入技術(shù)描述中,讀來(lái)宛若一本小說(shuō),極富趣味。
本書(shū)講述了C語(yǔ)言的歷史、語(yǔ)言特性、聲明、數(shù)組、指針、連接、運(yùn)行時(shí)以及內(nèi)存使用等知識(shí),揭示了C語(yǔ)言中許多隱晦之處,尤其深入解析了聲明、數(shù)組和指針、內(nèi)存使用等方面的細(xì)節(jié)。要想成為一名專(zhuān)家級(jí)C程序員,這些內(nèi)容都是必須掌握的。和其他滿(mǎn)是抽象例子的C語(yǔ)言書(shū)籍不同,這本書(shū)充滿(mǎn)了大量的來(lái)自真實(shí)世界的C程序設(shè)計(jì)實(shí)例,它們對(duì)C程序員具有很高的參照價(jià)值。另外,每一章都以極富趣味的“輕松一下”收尾,而附錄A“程序員工作面試的秘密”則是任何語(yǔ)言的程序員在應(yīng)聘工作前增強(qiáng)自信的好材料。
我懷疑真正的C專(zhuān)家可能用不著看這本書(shū) - 從內(nèi)容到組織方式到行文風(fēng)格都決定了這是一本輕松愉快的“從菜鳥(niǎo)到高手”的進(jìn)階讀本,所以,它理應(yīng)擁有更廣泛的讀者群。初級(jí)程序員往往更需要熱情的鼓勵(lì),在閱讀這本書(shū)的過(guò)程中,你定會(huì)深深地被作者對(duì)編程的激情所感染。
世間并無(wú)完美。我認(rèn)為這本書(shū)的缺陷在于,和大多數(shù)平庸的C語(yǔ)言書(shū)籍一樣,它畫(huà)蛇添足地加入了一章關(guān)于C++的描述。在今天看來(lái),這個(gè)描述既不全面也有失公允。不過(guò),鑒于作者是在1994年從一名C程序員的角度去觀察C++,這一點(diǎn)也就不足為奇了。
3. Samuel P. Harbison, Guy L. Steele,《C語(yǔ)言參考手冊(cè)(第五版)》(影印版),人民郵電出版社
在C語(yǔ)言參考手冊(cè)類(lèi)書(shū)籍里,Samuel P. Harbison 和Guy L. Steele合著的《C: A Reference Manual》是非常出色的一本。這本手冊(cè)的第五版新增了對(duì)C99標(biāo)準(zhǔn)的介紹,以便滿(mǎn)足新時(shí)期C語(yǔ)言學(xué)習(xí)的需要。全書(shū)共分為兩大部分,第一部分專(zhuān)注于C語(yǔ)言特性,第二部分則全面討論了C標(biāo)準(zhǔn)庫(kù)。本書(shū)涵蓋C99、C89、傳統(tǒng)的C、所有版本的C運(yùn)行庫(kù)以及編寫(xiě)與C++兼容的C代碼等一切知識(shí)。
這本手冊(cè)只是中等厚度,但它比“比它更厚”的其他參考手冊(cè)更清晰地描述了C語(yǔ)言的現(xiàn)在和過(guò)去的方方面面。整本手冊(cè)技術(shù)細(xì)節(jié)描述精確,組織條理清楚,內(nèi)容完備詳盡而又簡(jiǎn)明扼要。可以這么說(shuō),它在廣度、深度和精度方面都是出類(lèi)拔萃的。對(duì)于中、高級(jí)C程序員而言,這本手冊(cè)值得常備案頭,它幾乎肯定要比K&R的著作使用頻率更高。
2004年2月1日補(bǔ)充:我手頭有這本書(shū)的中文版:《C語(yǔ)言參考手冊(cè)》(機(jī)械工業(yè)出版社出版)。它在很大程度上減輕了我的查閱負(fù)擔(dān),不過(guò)偶爾也增加了理解上的困難。
4. David Hanson,《C語(yǔ)言接口與實(shí)現(xiàn):創(chuàng)建可重用軟件的技術(shù)》,機(jī)械工業(yè)出版社
C語(yǔ)言能夠歷經(jīng)三十多年而不衰,一個(gè)重要的原因在于它的適應(yīng)能力。在這“復(fù)用”、“面向?qū)ο蟆?、“組件”、“異常處理”等先進(jìn)機(jī)制漫天飛舞的年代,C語(yǔ)言仍然能夠憑借它小而優(yōu)雅的語(yǔ)言特性,在相當(dāng)程度上滿(mǎn)足現(xiàn)代軟件體系架構(gòu)提出的要求。只不過(guò),想要達(dá)到這個(gè)程度,必須要在C的應(yīng)用功力上達(dá)到最高層次。在嵌入式、系統(tǒng)軟件以及對(duì)性能要求極高的系統(tǒng)開(kāi)發(fā)中,開(kāi)發(fā)人員必須達(dá)到這樣的層次,熟練掌握C語(yǔ)言的高級(jí)特性,才能夠同時(shí)滿(mǎn)足效率和靈活性、復(fù)用性的要求??上?,雖然C語(yǔ)言技術(shù)圖書(shū)汗牛充棟,但是關(guān)注這個(gè)峰頂之域的作品卻是屈指可數(shù)。David Hanson的《C Interfaces and Implementations》就是個(gè)中翹楚。
David Hanson是業(yè)內(nèi)大名鼎鼎的自由編譯器lcc的合作者。在這個(gè)項(xiàng)目中,他負(fù)責(zé)提供高度可復(fù)用的基礎(chǔ)架構(gòu)。在不斷的實(shí)踐中,他完全使用ANSI C形成了一整套可復(fù)用組件庫(kù)。這套組件庫(kù)架構(gòu)清晰,性能優(yōu)異,而且提供了很多高級(jí)的特性,比如類(lèi)Win32 SEH的異常處理機(jī)制,可移植的線程庫(kù),高性能的內(nèi)存池,豐富的可復(fù)用數(shù)據(jù)結(jié)構(gòu)組件。David Hanson把他在創(chuàng)作這些組件的過(guò)程中所積累的心得以及對(duì)其源碼的精致剖析原原本本地寫(xiě)在了這本書(shū)里。這樣的著作,當(dāng)然堪稱(chēng)C語(yǔ)言領(lǐng)域里的銘心絕品。難怪已故著名技術(shù)作家Richard Stevens對(duì)此書(shū)贊不絕口,他說(shuō):“這本書(shū)中的技術(shù),對(duì)于大部分C程序員來(lái)說(shuō),已經(jīng)遺忘得太久了?!睂?duì)于希望能在C語(yǔ)言應(yīng)用上達(dá)到最高層次的核心程序員而言,這本書(shū)是難得的必讀之作。
其他
除了以上四本書(shū)以外,我還樂(lè)意推薦Andrew Koenig的著作《C陷阱和缺陷》(人民郵電出版社)和Deitel父子合著的《C How to Program》兩本書(shū)。
Andrew Koenig是世界上屈指可數(shù)的C++專(zhuān)家,他的這本書(shū)可能是最薄的一本C語(yǔ)言經(jīng)典。它簡(jiǎn)明扼要地講述了C程序設(shè)計(jì)中的陷阱和缺陷,包括詞法陷阱、語(yǔ)法陷阱、語(yǔ)義陷阱、連接、庫(kù)函數(shù)、預(yù)處理器以及可移植性缺陷等,最后一章還給出了關(guān)于如何減少程序錯(cuò)誤的建議以及前面各章問(wèn)題的參考答案。盡管這個(gè)小冊(cè)子成書(shū)于C89標(biāo)準(zhǔn)制定之前,然而,即使到了C99早已頒布的今天,書(shū)中提到的大多數(shù)陷阱和缺陷一如十五年前那樣使我們警醒。
Deitel父子合著的《C How to Program》一直是非常好的C語(yǔ)言入門(mén)教程,我手頭的中譯本名為《C程序設(shè)計(jì)教程》(機(jī)械工業(yè)出版社出版,原書(shū)第二版)。除了對(duì)技術(shù)的正規(guī)描述(輔以許多簡(jiǎn)明扼要的例子)外,每一章后面都帶有小結(jié)、術(shù)語(yǔ)、常見(jiàn)的程序設(shè)計(jì)錯(cuò)誤、良好的程序設(shè)計(jì)習(xí)慣、性能忠告、可移植性忠告、軟件工程評(píng)述、自我測(cè)驗(yàn)練習(xí)及答案等。整書(shū)內(nèi)容清晰,組織良好,易于閱讀和理解。值得一提的是,有許多入門(mén)書(shū)讀完一遍即可扔掉,而這一本是個(gè)例外。
回復(fù) 更多評(píng)論