日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言及如何学

發(fā)布時間:2024/3/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言及如何学 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C語言本身只提供必要的語言特性,其它復(fù)雜一點功能如文件處理、數(shù)學(xué)計算等等都以庫函數(shù)方式提供,甚至連malloc、free這種“必須有”的功能,也是以標(biāo)準庫函數(shù)的方式提供,而不是作為C語言核心出現(xiàn)。

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)勢力量。

提到C語言的缺點,常常是它缺少這種或者那種特性,比如有人建議加入GC,有人建議加入并行或者并發(fā)支持,有人提到?jīng)]有一個比較完整的類似C++的異常策略。這些特性有的可以通過引入第三方庫來實現(xiàn),但C語言的設(shè)計哲學(xué)其實決定了它不會像C++那樣“非常強大”。即使引入了某些人期望的特性,依然會是某些人喜歡某些人不喜歡的情形,現(xiàn)在的功能對于C語言應(yīng)用領(lǐng)域來說已經(jīng)夠用,其它特性可以通過特定程序語言實現(xiàn),并且通過C API與C語言編寫的程序進行交互。任何一個工匠都不可能只使用一個工具完成他的工作,不同工具結(jié)合起來才能更快更好的完成任務(wù)。

提到C API,也稍微介紹一下,我們知道windows操作系統(tǒng)的api也好,Linux的系統(tǒng)api也好,或者是想給Ruby、Python編寫擴展模塊,C語言形式的函數(shù)定義都是唯一的選擇。C語言就好像是一個中間層或者是膠水,如果想把不同編程語言實現(xiàn)的功能模塊混合使用,C語言是最佳的選擇。

學(xué)習(xí)C語言是否適合就看你自己的判斷了,例如要進行一個嵌入式項目,或者需要進行服務(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)典的好書,仔細完整反復(fù)閱讀幾遍,“書讀百遍其義自現(xiàn)”。選擇C語言學(xué)習(xí)的好處是,這幾本書基本上完整涵蓋了C語言編程領(lǐng)域的方方面面,不會像C++那樣,即使讀完一堆書還是有些糊涂,依然有這樣那樣難懂的陷阱。

1,參考書籍

在豆瓣上列了一個書單,大家可以直接參考http://book.douban.com/doulist/636329/

在下面簡單點評一下,閱讀順序最好參照列出的順序。

《The C Programming Language》http://book.douban.com/subject/1230004/

如果你只想買一本書學(xué)習(xí)C語言,只需要買這一本就夠了。如果你經(jīng)費足夠,建議你多買幾本,辦公室、家里都放上一本,隨手都可以翻翻。用三個詞語來形容它就是:經(jīng)典!經(jīng)典!經(jīng)典!這本薄薄的只有二百多頁的小書涵蓋了C語言的方方面面,前無古人而且后無來者,任何溢美之詞都不足以形容它。

《The C Programming Language》(后面稱為 K&R)里面包含了一個簡單的語法解析器,包含了malloc如何實現(xiàn),包含了一個完整的操作系統(tǒng)目錄瀏覽程序,這些程序的實用性極高,可以這樣說,如果學(xué)習(xí)任何一門語言能夠自己獨立動手實現(xiàn)以上的功能,基本上就可以算是入門了。K&R書里面每段都蘊含著非常值得探究的軟件開發(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é)詳細介紹C語言中數(shù)組與指針的不同之處,這兩本書在某種程度上算是對K&R略過的地方做了詳細補充,強烈推薦。

《C語言參考手冊》http://book.douban.com/subject/2132084/

這是最后一本強烈推薦你最好買回家作為案頭書必備的參考書。前面幾本書或者稍顯簡略,或者專注某個特定專題,都不適合遇到問題時翻查。這本《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)準庫》http://book.douban.com/subject/3775842/

這本書是專門介紹C語言的標(biāo)準庫如何實現(xiàn)的,比如malloc算法,用標(biāo)準的C語言該如何寫?strlen這個函數(shù)應(yīng)該如何實現(xiàn)?盡管書中不少代碼與真實的C標(biāo)準庫相差很多(由于標(biāo)準庫需要考慮性能優(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語言編程,可作為計算機相關(guān)專業(yè)的教科書或入門參考書,也是書單里面唯一一本國人原創(chuàng)的編程書籍,非常難得。書中幾乎所有內(nèi)容都在網(wǎng)上直接公開,針對讀者的意見進行修改,這也是非常難得的一種開放態(tài)度。非常推薦大家買一本。

學(xué)習(xí)C語言,一定不能只讀書,應(yīng)該動手練習(xí)完成書里面的項目需求(比如編寫一個目錄瀏覽器)以及每章的練習(xí)題目。這就需要有可以實驗的環(huán)境,下面針對不同操作系統(tǒng)簡單做一下介紹。

2,動手實驗環(huán)境搭建

也沒有調(diào)查過,不知道現(xiàn)在學(xué)校里學(xué)習(xí)C語言是不是依然跟著譚浩強老師用TurboC2.0編程,如果還是這個組合的話,那就太差勁了,趕快拋開它們。

下面主要介紹不同操作系統(tǒng)平臺下的集成編程環(huán)境,基于初學(xué)者以及我個人喜好,就不推薦大家命令行下用vim編程了,直接上IDE。

Windows系統(tǒng)下推薦大家使用Code::blocks這個軟件。這個軟件最大優(yōu)點是自帶了基于mingw的GCC以及GDB,只要下載70M左右軟件包,就可以完整支持C++、C語言編程了。各種功能(比如調(diào)試功能)也很強大,版本更新也比較快。注意下載選擇名字有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/

對于計算機專業(yè)的學(xué)生朋友,建議大家使用Linux操作系統(tǒng),或者更詳細一點是使用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)站上免費下載,在IPhone SDK中也包含了XCode。


主頁:http://developer.apple.com/technologies/tools/xcode.html

如果手頭沒有合適的編程環(huán)境,還需要實驗一些簡單的代碼,可以用http://codepad.org/ 提供的服務(wù),在線編寫運行代碼。

另外建議大家申請一個github.com的賬號,在gist.github.com可以保存自己的練習(xí)代碼,就不需要隨身帶著U盤了。

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)準為C99。設(shè)計上主要受到了B、ALGOL68、匯編語言、PL/I、FORTRAN的影響,C語言也影響了大量編程語言,如C++、Objective-C、C#、Java、Go、PHP、Python等等(個人覺得受C影響很大的是PHP,基本上有C編程基礎(chǔ)的程序員,很容易就能上手PHP了,除了PHP的OO部分)。

在維基百科條目中有很大篇幅介紹了作者認為C語言缺失的特性,比如面向?qū)ο?、多線程、GC、異常處理等等,當(dāng)然這有些吹毛求疵,如果需要這些特性,完全可以用其它程序語言。另外一個介紹的重點是“未定義行為”,有些我們認為理所當(dāng)然的結(jié)果,其實在C語言標(biāo)準中并沒有明確定義,假定這些行為應(yīng)該如何,當(dāng)程序使用另外的編譯器或者不同版本編譯器編譯運行,都可能有bug產(chǎn)生。

接下來維基百科條目談到了C語言的用處,必須承認盡管現(xiàn)在編程語言成百上千,能稱之為“系統(tǒng)級”的少之又少,新興語言中只有Go還能稱得上?,F(xiàn)在大規(guī)模軟件項目中完全選用C語言可能性不大,但是核心部分完全可以用C搭建,相對C++開發(fā)工具的高昂價格,C語言相關(guān)的免費輔助開發(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/ 相比美味書簽時效性能差點,但是分類比較系統(tǒng),查找也要容易一些。

程序員往往是懶惰的,“拿來主義”、“拷貝主義”很流行也很有效,當(dāng)對某個函數(shù)或者關(guān)鍵字不是很理解的時候,看看別人是怎么使用的,會非常有啟發(fā)性。這里介紹幾個常用的代碼搜索網(wǎng)站,最常用的是google的codesearch:http://codesearch.google.com ,可以通過不同條件及正則表達式搜索特定關(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ì)項目那是“彩旗飄舞,人山人?!?#xff0c;個人建議可以看看Lua、Sqlite、Nginx這些項目的代碼,代碼量不多,而且代碼質(zhì)量也都比較高。另外可以看看Linux內(nèi)核代碼,坊間有不少書籍可以幫助解讀。關(guān)于如何很好的閱讀代碼,大家可以參考《Code Reading》這本書。

書看了幾本,代碼寫了一些,也略微讀了讀其他人的代碼,就應(yīng)該用C語言來完成真實工作中碰到的問題,讓C語言真正成為你的瑞士軍刀。只有當(dāng)你經(jīng)常使用C語言來進行編程工作,經(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)中,有一些難點需要多加注意,如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)準化組織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達人Jserv博客,建議大家訂閱:http://blog.linux.org.tw/~jserv/

一些值得關(guān)注及研究的C語言相關(guān)項目:

TinyCC,被很多項目用作動態(tài)編譯C語言的編譯器引擎:http://bellard.org/tcc/

GCC的標(biāo)準庫實現(xiàn):http://en.wikipedia.org/wiki/GNU_C_Library

Glib是GTK的底層輔助編程庫,與C標(biāo)準庫是不一樣的,在C語言上實現(xiàn)了面向?qū)ο髾C制:http://en.wikipedia.org/wiki/GLib

dietlibc在前面博客文章介紹過,C標(biāo)準庫的另一種實現(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)準:

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/ 這一本寫的非常詳細,你可以把它看成是類似譚浩強版的教科書。

http://www.knosof.co.uk/cbook/cbook.html 這一本云風(fēng)曾經(jīng)推薦過,相當(dāng)深入的介紹了C99標(biāo)準,深入細節(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)準和實現(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)準兼容性問題:http://david.tribble.com/text/cdiffs.htm

《C Elements of Style》http://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é)ppt http://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

如何使用GDB http://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/


總結(jié)

以上是生活随笔為你收集整理的C语言及如何学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。