幾本非常經典的好書,仔細完整反復閱讀幾遍,“書讀百遍其義自現”。選擇C語言學習的好處是,這幾本書基本上完整涵蓋了C語言編程領域的方方面面,不會像C++那樣,即使讀完一堆書還是有些糊塗,依然有這樣那樣難懂的陷阱。
在豆瓣上列了一個書單,大家可以直接參考http://book.douban.com/doulist/636329/
在下面簡單點評一下,閱讀順序最好參照列出的順序。
《The C Programming Language》http://book.douban.com/subject/1230004/
如果你只想買一本書學習C語言,只需要買這一本就夠了。如果你經費足夠,建議你多買幾本,辦公室、家裡都放上一本,隨手都可以翻翻。用三個詞語來形容它就是:經典!經典!經典!這本薄薄的只有二百多頁的小書涵蓋了C語言的方方面面,前無古人而且後無來者,任何溢美之詞都不足以形容它。
《The C Programming Language》(後面稱為 K&R)裡面包含了一個簡單的語法解析器,包含了malloc如何實現,包含了一個完整的操作系統目錄浏覽程序,這些程序的實用性極高,可以這樣說,如果學習任何一門語言能夠自己獨立動手實現以上的功能,基本上就可以算是入門了。K&R書裡面每段都蘊含著非常值得探究的軟件開發工程實踐經驗,如果沒有一定的開發經驗,其實是看不出來這些冰山下面的內容的,比如開頭一章就提出用寫完整代碼這種方式來教學,而在書中那些C語言的陷阱或者可能出問題的地方,都有提到,但是由於篇幅所限,寫的非常簡約,很難讓人一下就看懂。我正在完整的逐字逐句的閱讀此書,希望能稍作注解,寫幾篇博客分享一下。
《C程序設計語言(第2版·新版)》http://book.douban.com/subject/1139336/
這是K&R的中文譯本,可以先從中文譯本看起,然後再讀一遍英文原版,既可以學習英文,又可以體會原文那種簡約優美的風格。
《C陷阱與缺陷》http://book.douban.com/subject/2778632/
《C專家編程》http://book.douban.com/subject/2377310/
這兩本書也是學習及使用C語言的朋友必備的兩本書,比如《C專家編程》,專門用兩三個章節詳細介紹C語言中數組與指針的不同之處,這兩本書在某種程度上算是對K&R略過的地方做了詳細補充,強烈推薦。
《C語言參考手冊》http://book.douban.com/subject/2132084/
這是最後一本強烈推薦你最好買回家作為案頭書必備的參考書。前面幾本書或者稍顯簡略,或者專注某個特定專題,都不適合遇到問題時翻查。這本《C語言參考手冊》可以看作是C語言編程的《新華字典》,全面而權威。裡面還涵蓋了C99的內容,緊跟時代潮流。
下面幾本書都可以作為交叉參考,也都很有價值,也是建議大家都買下來,好書如朋友,日久彌新,像是我推薦的這幾本書在douban或者amazon上評分都非常高,而且反復再版。
《C和指針》http://book.douban.com/subject/1229973/
指針的重要性如何,學過C語言(或者C++)的朋友都知道,這本書更是把指針拔高到了與C語言平起平坐的地位,其實也是從頭開始介紹,作為教學參考書也是可以的。
《C標准庫》http://book.douban.com/subject/3775842/
這本書是專門介紹C語言的標准庫如何實現的,比如malloc算法,用標准的C語言該如何寫?strlen這個函數應該如何實現?盡管書中不少代碼與真實的C標准庫相差很多(由於標准庫需要考慮性能優化,很多函數有一些特定的trick),但是絕對值得參考。
《你必須知道的495個C語言問題》 http://book.douban.com/subject/3422332/
這本書其實就是C-FAQ的印刷版本,C-FAQ在各種編程語言的FAQ中可以稱得上質量一流。如果你想應聘或者招聘C語言相關程序員,這本書一定要參考。
《Linux C編程一站式學習》http://book.douban.com/subject/4141733/
這本書是基於特定操作系統Linux來介紹C語言編程,可作為計算機相關專業的教科書或入門參考書,也是書單裡面唯一一本國人原創的編程書籍,非常難得。書中幾乎所有內容都在網上直接公開,針對讀者的意見進行修改,這也是非常難得的一種開放態度。非常推薦大家買一本。
學習C語言,一定不能只讀書,應該動手練習完成書裡面的項目需求(比如編寫一個目錄浏覽器)以及每章的練習題目。這就需要有可以實驗的環境,下面針對不同操作系統簡單做一下介紹。
也沒有調查過,不知道現在學校裡學習C語言是不是依然跟著譚浩強老師用TurboC2.0編程,如果還是這個組合的話,那就太差勁了,趕快拋開它們。
下面主要介紹不同操作系統平台下的集成編程環境,基於初學者以及我個人喜好,就不推薦大家命令行下用vim編程了,直接上IDE。
Windows系統下推薦大家使用Code::blocks這個軟件。這個軟件最大優點是自帶了基於mingw的GCC以及GDB,只要下載70M左右軟件包,就可以完整支持C++、C語言編程了。各種功能(比如調試功能)也很強大,版本更新也比較快。注意下載選擇名字有mingw的文件,比如最新版本是codeblocks-10.05mingw-setup.exe(版本也許有所不同)。
主頁:http://www.codeblocks.org/
如果需要做Windows操作系統的開發,可以下載Visual C++ 2010 Express。
因為Code::Blocks不包含Windows編程頭文件(實際是因為沒有Windows SDK),無法編寫Windows操作系統相關的界面應用程序或者服務類程序。而VC++Express自帶了這些頭文件以及編程庫,雖然功能稍微簡陋,但對於練習使用基本夠用。
主頁:http://www.microsoft.com/express/windows/
對於計算機專業的學生朋友,建議大家使用Linux操作系統,或者更詳細一點是使用Xubuntu操作系統作為桌面,使用Netbeans和GCC這個組合(當然也可以選擇Code::Blocks)。在Xubuntu下可以通過apt-get install build-essential這個命令安裝gcc相關程序,已經可以在Terminal下編譯C語言程序了,但為了使用方便,大家可以選擇Netbeans的C++支持包,在Netbeans網站上就能下載。
主頁: