漫談C語言如何學(xué)習(xí)及資料

云風(fēng)最近寫了一篇博客《C語言的前世今生》霹崎。作為長期使用C語言開發(fā)網(wǎng)絡(luò)游戲服務(wù)器的程序員,云風(fēng)是有理由寫這樣一篇文字,不過還是感覺談的不夠深入,C語言在業(yè)界使用的現(xiàn)狀沒有怎么描寫看幼,有些意猶未盡。在這里想比較系統(tǒng)的談?wù)剛€人對C語言學(xué)習(xí)方式方法的理解幌陕。分別按照書籍诵姜、實驗環(huán)境搭建、網(wǎng)絡(luò)資源來分別介紹苞轿,希望能寫的比較完整全面一些,給想學(xué)習(xí)C語言的朋友一個有價值的參考逗物。
為什么要學(xué)習(xí)C語言搬卒?
為什么要學(xué)習(xí)、使用C語言翎卓?為什么要學(xué)習(xí)一個可能比自己都?xì)q數(shù)大的編程語言契邀?
我在前面如何學(xué)習(xí)編程語言的博客文章http://sunxiunan.com/?p=1597里提到,選擇一門編程語言失暴,“為什么而學(xué)”這個目的是最重要的坯门,目的不明確就沒法學(xué)好。這也是為什么很多學(xué)生朋友在大學(xué)里必修C語言卻覺得沒學(xué)明白的原因逗扒。因為學(xué)習(xí)的目的不明確古戴,學(xué)習(xí)當(dāng)然也沒有動力。還有一個原因是C語言是工程實踐性很強(qiáng)的語言矩肩,它不是來自某個研究所某個大學(xué)學(xué)院现恼,而是實實在在從項目需要中產(chǎn)生,伴隨著Unix的興起而流行黍檩,語義簡明清晰叉袍,功能強(qiáng)大而不臃腫,簡潔而又不過分簡單刽酱,實在是居家旅行工作學(xué)習(xí)必備之良友喳逛。
C語言相比C++的優(yōu)點(diǎn)之一就是最小驚訝原則,一是一二是二棵里,不會在私底下產(chǎn)生一些莫名其妙的額外產(chǎn)物润文。用C++做個例子姐呐,比如這樣一個函數(shù)原型void PassWithClassValue(COneClass clsParam1),稍微了解C++的朋友都會知道转唉,如果你沒有實現(xiàn)COneClass的拷貝構(gòu)造函數(shù)皮钠,編譯器會好心的幫你實現(xiàn)一個,而且在調(diào)用這個函數(shù)PassWithClassValue的時候赠法,偷偷地調(diào)用拷貝構(gòu)造函數(shù)產(chǎn)生一個臨時對象作為參數(shù)傳遞麦轰,對于某些情況,比如編寫操作系統(tǒng)這類必須優(yōu)化性能的情景下砖织,這些自以為是的東西是非常邪惡的事情款侵。
C語言本身只提供必要的語言特性,其它復(fù)雜一點(diǎn)功能如文件處理侧纯、數(shù)學(xué)計算等等都以庫函數(shù)方式提供新锈,甚至連malloc、free這種“必須有”的功能眶熬,也是以標(biāo)準(zhǔn)庫函數(shù)的方式提供妹笆,而不是作為C語言核心出現(xiàn)。在偉大的著名的無所不包的《K&R》開頭部分就提到了娜氏,for其實可以通過while來完成拳缠,只不過for可以寫的更簡潔,言外之意贸弥,對于C語言for其實不是必要的窟坐。跑題一點(diǎn)說,在其它程序語言中Lua可以說繼承了C語言簡潔的設(shè)計哲學(xué)绵疲,甚至連continue這種幾乎必備的關(guān)鍵字都一直拒絕加入哲鸳,在Lua的maillist以及wiki里都提到過continue這個問題,Lua語言維護(hù)者認(rèn)為continue對于Lua而言不是必要的盔憨,也不考慮在后續(xù)版本中添加這個關(guān)鍵字徙菠。這種簡潔哲學(xué)也讓C語言的可移植性、便攜性特別優(yōu)秀郁岩,也使得很多嵌入式系統(tǒng)依然使用C語言作為主要編程工作語言懒豹。
Java語言有一個口號:“一次編寫,處處運(yùn)行”驯用,就是跨平臺這個噱頭脸秽。實際上C語言從早期開始就幾乎達(dá)到了“一次編寫,處處編譯”蝴乔,在ANSI在1989年統(tǒng)一了C語言標(biāo)準(zhǔn)以后(稱之為C89)记餐,只要特定平臺上的編譯器完整實現(xiàn)了C89標(biāo)準(zhǔn),而且你的代碼沒有使用某些特殊的擴(kuò)展(GCC以及微軟都有自己的編譯器特定擴(kuò)展)薇正,那么代碼一定可以編譯通過片酝,再實現(xiàn)一下操作系統(tǒng)相關(guān)的函數(shù)庫囚衔,C語言的移植就是很簡單的事情〉裱兀可以用Lua作為例子练湿,Lua本身是完全遵循C89標(biāo)準(zhǔn),沒有使用任何特定擴(kuò)展审轮,這也保證了有C語言編譯器的平臺肥哎,都可以編譯使用Lua〖苍可以編譯運(yùn)行C語言的硬件平臺可以從A排到Z篡诽,真是非常有意思的事情。
C語言也是一個比較少見的應(yīng)用領(lǐng)域極為廣泛的語言榴捡。比如編寫操作系統(tǒng)這種高難問題杈女,只有C++、匯編語言可以做到吊圾。C語言可以編寫服務(wù)器端軟件如Apache达椰、Nginx,或者編寫GUI程序项乒,如GTK啰劲。大多數(shù)程序語言的第一版是通過C語言實現(xiàn),借助前面提到的“一次編寫處處編譯”板丽,最大的保證了這些程序語言的可移植性呈枉。在Web開發(fā)領(lǐng)域趁尼,C語言的應(yīng)用相對較少埃碱,這也是一種取舍的結(jié)果,Web開發(fā)需要使用PHP酥泞、Ruby砚殿、Python這樣的動態(tài)語言,可以快速上線快速修改芝囤,可以最大程度滿足用戶時時變化的需求似炎,這也是C語言的弱項。如果把程序語言的應(yīng)用領(lǐng)域從硬件到管理軟件悯姊、Web程序做一個很粗略從下到上的排列羡藐,C語言適合領(lǐng)域是比較底層靠近硬件的部分,而新興語言比較偏重于高層管理或者Web開發(fā)這種相對貼近最終用戶的領(lǐng)域悯许。比較流行的混合開發(fā)模式是使用C語言編寫底層高性能部分代碼或后臺服務(wù)器代碼仆嗦,而使用動態(tài)語言如Python做前端開發(fā),充分發(fā)揮它們各自的優(yōu)勢力量先壕。
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話瘩扼,歡迎加入學(xué)習(xí)交流群
639368839谆甜,我們一起學(xué)C/C++!
提到C語言的缺點(diǎn)集绰,常常是它缺少這種或者那種特性规辱,比如有人建議加入GC,有人建議加入并行或者并發(fā)支持栽燕,有人提到?jīng)]有一個比較完整的類似C++的異常策略罕袋。這些特性有的可以通過引入第三方庫來實現(xiàn),但C語言的設(shè)計哲學(xué)其實決定了它不會像C++那樣“非常強(qiáng)大”纫谅。即使引入了某些人期望的特性炫贤,依然會是某些人喜歡某些人不喜歡的情形,現(xiàn)在的功能對于C語言應(yīng)用領(lǐng)域來說已經(jīng)夠用付秕,其它特性可以通過特定程序語言實現(xiàn)兰珍,并且通過C API與C語言編寫的程序進(jìn)行交互。任何一個工匠都不可能只使用一個工具完成他的工作询吴,不同工具結(jié)合起來才能更快更好的完成任務(wù)掠河。
提到C API,也稍微介紹一下猛计,我們知道windows操作系統(tǒng)的api也好唠摹,Linux的系統(tǒng)api也好,或者是想給Ruby奉瘤、Python編寫擴(kuò)展模塊勾拉,C語言形式的函數(shù)定義都是唯一的選擇。C語言就好像是一個中間層或者是膠水盗温,如果想把不同編程語言實現(xiàn)的功能模塊混合使用藕赞,C語言是最佳的選擇。
提了這么多關(guān)于C語言的好處卖局,那么學(xué)習(xí)C語言是否適合就看你自己的判斷了斧蜕,例如要進(jìn)行一個嵌入式項目,或者需要進(jìn)行服務(wù)器端開發(fā)砚偶,或者寫一個性能相關(guān)的組件等等批销,C語言都是比較好用的選擇。另外也可以在C++的使用過程中有意的使用C語言的思考方式染坯,汲取C語言簡潔明快清晰地設(shè)計思路均芽,對編程設(shè)計水平會有很大的提高。
C語言學(xué)習(xí)方法
在前面http://sunxiunan.com/?p=1597曾經(jīng)提到過一個比較系統(tǒng)學(xué)習(xí)一門新的編程語言的方式单鹿,C語言學(xué)習(xí)也可以按照類似的順序:閱讀參考書掀宋,閱讀代碼,編寫調(diào)試實際程序,上網(wǎng)參與討論布朦,研究高級話題囤萤。
學(xué)習(xí)語言的開始一般是閱讀參考書。我建議選擇幾本非常經(jīng)典的好書是趴,仔細(xì)完整反復(fù)閱讀幾遍涛舍,“書讀百遍其義自現(xiàn)”。選擇C語言學(xué)習(xí)的好處是唆途,這幾本書基本上完整涵蓋了C語言編程領(lǐng)域的方方面面富雅,不會像C++那樣,即使讀完一堆書還是有些糊涂肛搬,依然有這樣那樣難懂的陷阱没佑。
1,參考書籍
在豆瓣上列了一個書單温赔,大家可以直接參考http://book.douban.com/doulist/636329/
在下面簡單點(diǎn)評一下蛤奢,閱讀順序最好參照列出的順序。
《The C Programming Language》http://book.douban.com/subject/1230004/


如果你只想買一本書學(xué)習(xí)C語言陶贼,只需要買這一本就夠了啤贩。如果你經(jīng)費(fèi)足夠,建議你多買幾本拜秧,辦公室痹屹、家里都放上一本,隨手都可以翻翻枉氮。用三個詞語來形容它就是:經(jīng)典志衍!經(jīng)典!經(jīng)典聊替!這本薄薄的只有二百多頁的小書涵蓋了C語言的方方面面楼肪,前無古人而且后無來者,任何溢美之詞都不足以形容它佃牛。
《The C Programming Language》(后面稱為 K&R)里面包含了一個簡單的語法解析器淹辞,包含了malloc如何實現(xiàn)医舆,包含了一個完整的操作系統(tǒng)目錄瀏覽程序俘侠,這些程序的實用性極高,可以這樣說蔬将,如果學(xué)習(xí)任何一門語言能夠自己獨(dú)立動手實現(xiàn)以上的功能爷速,基本上就可以算是入門了。K&R書里面每段都蘊(yùn)含著非常值得探究的軟件開發(fā)工程實踐經(jīng)驗霞怀,如果沒有一定的開發(fā)經(jīng)驗惫东,其實是看不出來這些冰山下面的內(nèi)容的,比如開頭一章就提出用寫完整代碼這種方式來教學(xué),而在書中那些C語言的陷阱或者可能出問題的地方廉沮,都有提到颓遏,但是由于篇幅所限,寫的非常簡約滞时,很難讓人一下就看懂叁幢。我正在完整的逐字逐句的閱讀此書,希望能稍作注解坪稽,寫幾篇博客分享一下曼玩。
《C程序設(shè)計語言(第2版·新版)》http://book.douban.com/subject/1139336/
這是K&R的中文譯本,可以先從中文譯本看起窒百,然后再讀一遍英文原版黍判,既可以學(xué)習(xí)英文,又可以體會原文那種簡約優(yōu)美的風(fēng)格篙梢。
《C陷阱與缺陷》http://book.douban.com/subject/2778632/
《C專家編程》http://book.douban.com/subject/2377310/
這兩本書也是學(xué)習(xí)及使用C語言的朋友必備的兩本書顷帖,比如《C專家編程》,專門用兩三個章節(jié)詳細(xì)介紹C語言中數(shù)組與指針的不同之處渤滞,這兩本書在某種程度上算是對K&R略過的地方做了詳細(xì)補(bǔ)充窟她,強(qiáng)烈推薦。
《C語言參考手冊》http://book.douban.com/subject/2132084/
這是最后一本強(qiáng)烈推薦你最好買回家作為案頭書必備的參考書蔼水。前面幾本書或者稍顯簡略震糖,或者專注某個特定專題,都不適合遇到問題時翻查趴腋。這本《C語言參考手冊》可以看作是C語言編程的《新華字典》吊说,全面而權(quán)威。里面還涵蓋了C99的內(nèi)容优炬,緊跟時代潮流颁井。
下面幾本書都可以作為交叉參考,也都很有價值蠢护,也是建議大家都買下來雅宾,好書如朋友,日久彌新葵硕,像是我推薦的這幾本書在douban或者amazon上評分都非常高眉抬,而且反復(fù)再版。
《C和指針》http://book.douban.com/subject/1229973/
指針的重要性如何懈凹,學(xué)過C語言(或者C++)的朋友都知道蜀变,這本書更是把指針拔高到了與C語言平起平坐的地位,其實也是從頭開始介紹介评,作為教學(xué)參考書也是可以的库北。
《C標(biāo)準(zhǔn)庫》http://book.douban.com/subject/3775842/
這本書是專門介紹C語言的標(biāo)準(zhǔn)庫如何實現(xiàn)的爬舰,比如malloc算法,用標(biāo)準(zhǔn)的C語言該如何寫寒瓦?strlen這個函數(shù)應(yīng)該如何實現(xiàn)情屹?盡管書中不少代碼與真實的C標(biāo)準(zhǔn)庫相差很多(由于標(biāo)準(zhǔn)庫需要考慮性能優(yōu)化,很多函數(shù)有一些特定的trick)杂腰,但是絕對值得參考屁商。
《你必須知道的495個C語言問題》http://book.douban.com/subject/3422332/
這本書其實就是C-FAQ的印刷版本,C-FAQ在各種編程語言的FAQ中可以稱得上質(zhì)量一流颈墅。如果你想應(yīng)聘或者招聘C語言相關(guān)程序員蜡镶,這本書一定要參考。
《Linux C編程一站式學(xué)習(xí)》http://book.douban.com/subject/4141733/
這本書是基于特定操作系統(tǒng)Linux來介紹C語言編程恤筛,可作為計算機(jī)相關(guān)專業(yè)的教科書或入門參考書官还,也是書單里面唯一一本國人原創(chuàng)的編程書籍,非常難得毒坛。書中幾乎所有內(nèi)容都在網(wǎng)上直接公開望伦,針對讀者的意見進(jìn)行修改,這也是非常難得的一種開放態(tài)度煎殷。非常推薦大家買一本屯伞。
學(xué)習(xí)C語言,一定不能只讀書豪直,應(yīng)該動手練習(xí)完成書里面的項目需求(比如編寫一個目錄瀏覽器)以及每章的練習(xí)題目劣摇。這就需要有可以實驗的環(huán)境,下面針對不同操作系統(tǒng)簡單做一下介紹弓乙。
2末融,動手實驗環(huán)境搭建
也沒有調(diào)查過,不知道現(xiàn)在學(xué)校里學(xué)習(xí)C語言是不是依然跟著譚浩強(qiáng)老師用TurboC2.0編程暇韧,如果還是這個組合的話勾习,那就太差勁了,趕快拋開它們懈玻。
下面主要介紹不同操作系統(tǒng)平臺下的集成編程環(huán)境巧婶,基于初學(xué)者以及我個人喜好,就不推薦大家命令行下用vim編程了涂乌,直接上IDE艺栈。
Windows系統(tǒng)下推薦大家使用Code::blocks這個軟件。這個軟件最大優(yōu)點(diǎn)是自帶了基于mingw的GCC以及GDB骂倘,只要下載70M左右軟件包眼滤,就可以完整支持C++巴席、C語言編程了历涝。各種功能(比如調(diào)試功能)也很強(qiáng)大,版本更新也比較快。注意下載選擇名字有mingw的文件荧库,比如最新版本是codeblocks-10.05mingw-setup.exe(版本也許有所不同)堰塌。
主頁:http://www.codeblocks.org/

如果需要做Windows操作系統(tǒng)的開發(fā),可以下載Visual C++ 2010 Express分衫。

因為Code::Blocks不包含Windows編程頭文件(實際是因為沒有Windows SDK)场刑,無法編寫Windows操作系統(tǒng)相關(guān)的界面應(yīng)用程序或者服務(wù)類程序。而VC++Express自帶了這些頭文件以及編程庫蚪战,雖然功能稍微簡陋牵现,但對于練習(xí)使用基本夠用。
主頁:http://www.microsoft.com/express/windows/
對于計算機(jī)專業(yè)的學(xué)生朋友邀桑,建議大家使用Linux操作系統(tǒng)瞎疼,或者更詳細(xì)一點(diǎn)是使用Xubuntu操作系統(tǒng)作為桌面,使用Netbeans和GCC這個組合(當(dāng)然也可以選擇Code::Blocks)壁畸。在Xubuntu下可以通過apt-get install build-essential這個命令安裝gcc相關(guān)程序贼急,已經(jīng)可以在Terminal下編譯C語言程序了,但為了使用方便捏萍,大家可以選擇Netbeans的C++支持包太抓,在Netbeans網(wǎng)站上就能下載。

主頁:http://netbeans.org/features/cpp/index.html
如果使用蘋果Mac系統(tǒng)令杈,毫無疑問XCode就是編程的絕佳選擇走敌,XCode可以在蘋果開發(fā)者網(wǎng)站上免費(fèi)下載,在IPhone SDK中也包含了XCode逗噩。

主頁:http://developer.apple.com/technologies/tools/xcode.html
如果手頭沒有合適的編程環(huán)境悔常,還需要實驗一些簡單的代碼,可以用http://codepad.org/提供的服務(wù)给赞,在線編寫運(yùn)行代碼机打。

另外建議大家申請一個github.com的賬號,在gist.github.com可以保存自己的練習(xí)代碼片迅,就不需要隨身帶著U盤了残邀。
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入學(xué)習(xí)交流群
639368839柑蛇,我們一起學(xué)C/C++芥挣!
3,網(wǎng)絡(luò)資源
如果想用十分鐘時間了解一下C語言的來龍去脈耻台、前世今生空免,維基百科這個頁面http://en.wikipedia.org/wiki/C_%28programming_language%29是最佳選擇。
從維基百科可以看到盆耽,C語言1972年由Dennis Ritchie設(shè)計的命令式蹋砚、結(jié)構(gòu)化范式編程語言扼菠。類型為靜態(tài)的弱類型,需要顯式定義坝咐。最新國際標(biāo)準(zhǔn)為C99循榆。設(shè)計上主要受到了B、ALGOL68墨坚、匯編語言秧饮、PL/I、FORTRAN的影響泽篮,C語言也影響了大量編程語言盗尸,如C++、Objective-C帽撑、C#振劳、Java、Go油狂、PHP历恐、Python等等(個人覺得受C影響很大的是PHP,基本上有C編程基礎(chǔ)的程序員专筷,很容易就能上手PHP了弱贼,除了PHP的OO部分)。
在維基百科條目中有很大篇幅介紹了作者認(rèn)為C語言缺失的特性磷蛹,比如面向?qū)ο笏甭谩⒍嗑€程、GC味咳、異常處理等等庇勃,當(dāng)然這有些吹毛求疵,如果需要這些特性槽驶,完全可以用其它程序語言责嚷。另外一個介紹的重點(diǎn)是“未定義行為”,有些我們認(rèn)為理所當(dāng)然的結(jié)果掂铐,其實在C語言標(biāo)準(zhǔn)中并沒有明確定義罕拂,假定這些行為應(yīng)該如何,當(dāng)程序使用另外的編譯器或者不同版本編譯器編譯運(yùn)行全陨,都可能有bug產(chǎn)生爆班。
接下來維基百科條目談到了C語言的用處,必須承認(rèn)盡管現(xiàn)在編程語言成百上千辱姨,能稱之為“系統(tǒng)級”的少之又少柿菩,新興語言中只有Go還能稱得上。現(xiàn)在大規(guī)模軟件項目中完全選用C語言可能性不大雨涛,但是核心部分完全可以用C搭建枢舶,相對C++開發(fā)工具的高昂價格懦胞,C語言相關(guān)的免費(fèi)輔助開發(fā)軟件非常豐富,比如splint祟辟,valgrind医瘫,不少核心庫經(jīng)過長期使用也都非常穩(wěn)定侣肄。
由于C語言廣泛支持各種平臺以及編譯器相對成熟可靠旧困,不少編程語言選擇C語言作為一個中間層,比如Glasgow Haskell編譯器就是這樣做的稼锅。
另一個可以找到大量C語言編程相關(guān)資料的地方是“美味書簽”吼具,通過搜索特定關(guān)鍵字 (C + programming)就可以找到很多值得挖掘的資源http://delicious.com/search?p=c+programming
還可以參考dmoz.org的C語言分類http://www.dmoz.org/Computers/Programming/Languages/C/相比美味書簽時效性能差點(diǎn),但是分類比較系統(tǒng)矩距,查找也要容易一些拗盒。
程序員往往是懶惰的,“拿來主義”锥债、“拷貝主義”很流行也很有效陡蝇,當(dāng)對某個函數(shù)或者關(guān)鍵字不是很理解的時候,看看別人是怎么使用的哮肚,會非常有啟發(fā)性登夫。這里介紹幾個常用的代碼搜索網(wǎng)站,最常用的是google的codesearch:http://codesearch.google.com允趟,可以通過不同條件及正則表達(dá)式搜索特定關(guān)鍵詞恼策。另外可以參考維基百科上一個“帶有C語言示例的文章”分類,里面代碼寫的也很不錯潮剪。還可以在github.com上搜索相關(guān)項目涣楷。在前面博客文章我還介紹了一個名為羅塞塔代碼的網(wǎng)站http://rosettacode.org/這個網(wǎng)站上可以找到不同程序語言針對某個問題的解決方案,用于學(xué)習(xí)比較非常便利抗碰。
學(xué)習(xí)編程也需要大量閱讀名家經(jīng)典代碼狮斗,與學(xué)中文英文需要大量閱讀名著一個道理,C語言編程優(yōu)質(zhì)項目那是“彩旗飄舞弧蝇,人山人呵榱洌”,個人建議可以看看Lua捍壤、Sqlite骤视、Nginx這些項目的代碼滨彻,代碼量不多敲才,而且代碼質(zhì)量也都比較高赤惊。另外可以看看Linux內(nèi)核代碼拇囊,坊間有不少書籍可以幫助解讀屡律。關(guān)于如何很好的閱讀代碼,大家可以參考《Code Reading》這本書嘹裂。
書看了幾本市框,代碼寫了一些,也略微讀了讀其他人的代碼佑笋,就應(yīng)該用C語言來完成真實工作中碰到的問題翼闹,讓C語言真正成為你的瑞士軍刀。只有當(dāng)你經(jīng)常使用C語言來進(jìn)行編程工作蒋纬,經(jīng)常思考如何通過C設(shè)計一個優(yōu)雅高效的系統(tǒng)猎荠,才能更深刻的理解C語言設(shè)計哲學(xué)。
還可以到http://stackoverflow.com參與回答問題蜀备,瀏覽其他人的問題解答來汲取知識关摇,比如這篇http://stackoverflow.com/questions/2054939/char-is-signed-or-unsigned-by-default就介紹了一個C語言關(guān)于char類型的小陷阱。
C語言學(xué)習(xí)當(dāng)中碾阁,有一些難點(diǎn)需要多加注意输虱,如pointer與array的不同之處,復(fù)雜類型定義如何解讀脂凶,如何正確使用預(yù)處理preprocessor以及宏定義宪睹。其實這些內(nèi)容在前面書籍都是反復(fù)提到,如果按部就班學(xué)習(xí)下來蚕钦,應(yīng)該不成問題亭病。
當(dāng)C語言學(xué)習(xí)的差不多時候,還可以學(xué)習(xí)一門動態(tài)語言冠桃,比如Lua或者Python命贴,試著在實際工作項目中混合使用動態(tài)語言與C語言,一加一發(fā)揮出來的力量不僅僅是二食听,而是非常二(說笑一下胸蛛,哈哈)。
還有什么問題樱报,歡迎留言葬项。
附錄
一些有用的C語言網(wǎng)絡(luò)資源:
C語言標(biāo)準(zhǔn)化組織ISO JTC1/SC22/WG14的主頁,在這里可以找到ISO C的文檔:http://www.open-std.org/jtc1/sc22/wg14/
《The Development of the C Language》作者Dennis Ritchie迹蛤,極為經(jīng)典的論文民珍。http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
“C語言全景”這個網(wǎng)站內(nèi)容很全面:http://www.softpanorama.org/Lang/c.shtml
Dan Saks在embedded.com上的專欄Programming Pointer,里面文章很有深度盗飒,值得一讀嚷量。
http://www.lysator.liu.se/c/c-www.html這也是一個C語言資源匯總頁面。
http://www.ioccc.org/index.html混亂C語言代碼大賽逆趣,很著名蝶溶。
http://en.wikipedia.org/wiki/Underhanded_C_Contest另外一個C語言編程大賽,主要面向黑客。
comp.lang.c以及c.moderated這兩個討論組推薦訂閱抖所,相當(dāng)于互聯(lián)網(wǎng)最大的C相關(guān)編程問題論壇:
http://groups.google.com/group/comp.lang.c
http://groups.google.com/group/comp.lang.c.moderated
這里對C語言的各種bit操作做了收集整理梨州,不少題目在面試時候經(jīng)常出現(xiàn)。http://graphics.stanford.edu/~seander/bithacks.html
臺灣的慣C達(dá)人Jserv博客田轧,建議大家訂閱:http://blog.linux.org.tw/~jserv/
一些值得關(guān)注及研究的C語言相關(guān)項目:
TinyCC暴匠,被很多項目用作動態(tài)編譯C語言的編譯器引擎:http://bellard.org/tcc/
GCC的標(biāo)準(zhǔn)庫實現(xiàn):http://en.wikipedia.org/wiki/GNU_C_Library
Glib是GTK的底層輔助編程庫,與C標(biāo)準(zhǔn)庫是不一樣的傻粘,在C語言上實現(xiàn)了面向?qū)ο髾C(jī)制:http://en.wikipedia.org/wiki/GLib
dietlibc在前面博客文章介紹過每窖,C標(biāo)準(zhǔn)庫的另一種實現(xiàn):http://www.fefe.de/dietlibc/
一些C語言編程時可以使用的工具軟件,幫你提高代碼質(zhì)量:
http://www.splint.org/
http://valgrind.org/
http://www.dwheeler.com/flawfinder/
PMD可用于檢測重復(fù)代碼http://pmd.sourceforge.net/cpd.html
llvm的靜態(tài)分析項目http://clang-analyzer.llvm.org/
C語言編程規(guī)范編程標(biāo)準(zhǔn):
http://en.wikipedia.org/wiki/MISRA_C
http://www.eecs.harvard.edu/~ellard/CS50-96/programming-style.html
http://developers.sun.com/solaris/articles/secure.html
cert這個文檔國內(nèi)有中文翻譯版本:https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
http://www.cs.utah.edu/dept/old/texinfo/standards/standards_toc.html
C語言編程電子書及教程:
http://publications.gbdirect.co.uk/c_book/這一本寫的非常詳細(xì)抹腿,你可以把它看成是類似譚浩強(qiáng)版的教科書岛请。
http://www.knosof.co.uk/cbook/cbook.html這一本云風(fēng)曾經(jīng)推薦過旭寿,相當(dāng)深入的介紹了C99標(biāo)準(zhǔn)警绩,深入細(xì)節(jié)時候需要讀讀。
http://www.duckware.com/bugfreec/index.html這本書在網(wǎng)上流傳一個中文版本盅称,《編寫優(yōu)化肩祥、高效、無錯地代碼》缩膝,另外也有英文影印版《編程精粹》混狠。
http://wangcong.org/blog/?page_id=196作者王聰,也是相當(dāng)hard geek疾层,從兩個樣章看将饺,包含了相當(dāng)多的內(nèi)容。
《C語言深度解剖》這本可以在百度文庫或google搜到痛黎,可以讀讀予弧,有些參考性。
《C標(biāo)準(zhǔn)和實現(xiàn)》作者姚新顏湖饱,他的《深度探索C掖蛤、C++》算是當(dāng)年比較有深度的書籍,可惜已經(jīng)絕版了井厌。這本書也可以在百度文庫搜到蚓庭。這本書也比較值得讀。
良葛格C語言學(xué)習(xí)筆記http://caterpillar.onlyfun.net/Gossip/CGossip/CGossip.html
C與C++的兼容性問題http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
另一個文檔關(guān)于C與C++標(biāo)準(zhǔn)兼容性問題:http://david.tribble.com/text/cdiffs.htm
C Elements of Stylehttp://www.oualline.com/books.free/style/index.html
《Linux安全編程》http://www.dwheeler.com/secure-programs/
《C Craft》電子版http://crypto.stanford.edu/~blynn/c/
《The function pointer tutorials》函數(shù)指針教程仅仆。http://www.newty.de/fpt/index.html
C語言編程及Unix系統(tǒng)調(diào)用器赞,想用C在Unix或者Linux編程的朋友可以參考。http://www.cs.cf.ac.uk/Dave/C/
優(yōu)化C墓拜、C++代碼http://www.eventhelix.com/RealtimeMantra/Basics/OptimizingCAndCPPCode.htm
圖文并茂介紹C語言的指針http://boredzo.org/pointers/
另外一篇介紹C語言優(yōu)化的文章http://www.prism.uvsq.fr/~cedb/local_copies/lee.html
一個C語言教學(xué)ppthttp://www.slideshare.net/petdance/just-enough-c-for-open-source-programmers
一些Unix下C語言編程相關(guān)的文章http://users.actcom.co.il/~choo/lupg/tutorials/index.html
Unix下如何建立靜態(tài)港柜、動態(tài)C語言函數(shù)庫http://users.actcom.co.il/~choo/lupg/tutorials/libraries/unix-c-libraries.html
如何使用GDBhttp://users.actcom.co.il/~choo/lupg/tutorials/debugging/debugging-with-gdb.html
一些C語言編程技巧http://users.bestweb.net/~ctips/
Advanced C programming,高級C語言編程撮弧,可以提高水平潘懊,非常有幫助http://www.mpi-inf.mpg.de/departments/rg1/teaching/advancedc-ws08/literature.html
C語言問答姚糊,這些題目也可用于面試http://www.gowrikumar.com/c/
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,可以加我qq
1795495547
我們一起學(xué)C/C++授舟!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末救恨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子释树,更是在濱河造成了極大的恐慌肠槽,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奢啥,死亡現(xiàn)場離奇詭異秸仙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)桩盲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門寂纪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赌结,你說我怎么就攤上這事捞蛋。” “怎么了柬姚?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵拟杉,是天一觀的道長。 經(jīng)常有香客問我量承,道長搬设,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任撕捍,我火速辦了婚禮拿穴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卦洽。我一直安慰自己贞言,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布阀蒂。 她就那樣靜靜地躺著该窗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚤霞。 梳的紋絲不亂的頭發(fā)上酗失,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音昧绣,去河邊找鬼规肴。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拖刃。 我是一名探鬼主播删壮,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兑牡!你這毒婦竟也來了央碟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤均函,失蹤者是張志新(化名)和其女友劉穎亿虽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苞也,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洛勉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了如迟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片收毫。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖氓涣,靈堂內(nèi)的尸體忽然破棺而出牛哺,到底是詐尸還是另有隱情陋气,我是刑警寧澤劳吠,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站巩趁,受9級特大地震影響痒玩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜议慰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一蠢古、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧别凹,春花似錦草讶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拍霜,卻和暖如春嘱丢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祠饺。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工越驻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓缀旁,卻偏偏與公主長得像记劈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子并巍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容