1. 程式人生 > >C語言簡介&FAQ

C語言簡介&FAQ

C語言是什麼

  • C語言是一種計算機程式語言。

  • 1970年前後,AT&T 貝爾實驗室的 Ken Thompson根據BCPL語言設計出較先進的並取名為B的語言,之後Dennis Ritchie在此基礎上設計發明了C語言, 並首次在UNIX作業系統的 DEC PDP-11 計算機上使用。隨後,C語言和UNIX作業系統一起,攻佔了計算機世界的大片領地。

  • 在發展的過程中,出現了許多略有差別的C語言版本。1989年,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準,成為現行的C語言標準,就是所謂的C89。當然經過10年的發展,在C89的基礎上又頒佈了C99標準。現在流行的大部分編譯器完全支援C89

    ,部分編譯器完全支援C99。對於初學者來說,掌握經典的C89即可。

為何要選擇純C

  • 在某些時候,我們不得不只使用C語言而不是C++,這種情況稱為純C程式設計。最常見是因為以下兩個原因:

    1、C++的語法很複雜,所以C++的編譯器很難製作。因此在很多平臺上沒有現成的C++編譯器,而C編譯器因為足夠簡單,幾乎到處都有,這時就只能用純C。實際上最初的C++編譯器也是用C語言來實現的。

    2、仍然是因為C++很複雜,為了實現很多特性,做出的程式往往比用C做的類似功能程式體積要大很多,在程式的空間和時間要求比較高的時候,也只好選擇純C。

上面兩種情況經常共同出現,例項之一就是嵌入式裝置。各種微控制器往往沒有足夠的記憶體和處理器能力,在上面實現C++編譯器也比較困難,因此往往是純C開發,而非C++。

C++語言是什麼

  • C++和C的關係非比尋常。

  • 1979年,當Bjarne Stroustrup在新澤西州的Murray Hill實驗室工作時,發明了C++。Stroustrup最初把這種新語言稱為“帶類的C”,1983年,改名為C++。C++通過增加面向物件的特性擴充了C。因為C++產生在C的基礎之上,因此它包括了C所有的特徵、屬性和優點。在這個意義上,你可以認為C++是C語言的進化,這個進化的原因是複雜性(complexity)。一旦一個程式的程式碼超過25000~100000行,就很難從總體上把握它的複雜性了。C++突破了這個限制,幫助程式設計師理解並且管理更大的程式。

  • 當然今天的C++已經不只是C的進化那麼簡單,他還包含了其它很多很多的新內容,它是如此的複雜以至於你要花上幾倍於學習C的時間來學習他。但由於他和C的歷史淵源,所有支援C++的編譯器都能支援C。因此他倆也就被合稱為C/C++語言。

C++對於C的進化著重體現在規模上,幾乎C++的所有新特性,都是為大規模程式設計服務的。如果說C語言程式設計是單兵小組作戰的話,C++程式設計就是集團軍運動。

C/C++語言和其他語言有什麼關係

  • java只要用一句話就可以概括,它是一種簡化了的跨平臺的C++語言。掌握了C++的人,學習java幾乎是輕而易舉。

    -basic pascal delphi(其實是objectPascal) perl python 還有其他諸如此類的語言,或者與c處於同一檔次,或者與C++處於一個水平,學過C/C++之後,再去學習他們是很容易的事。有人比較偏愛和看好python,它的很多特性使他極有前途。

  • lisp Scheme是和C的思維方式完全不同的一類,被稱為函數語言程式設計語言,在人工智慧等領域有奇妙的應用。有興趣的朋友可以去領略,如果你要成為一個大師,至少要學習其中的一種。

為什麼要學C/C++語言

  • 考試的人不用討論這個問題,他們沒有選擇。如果我們有選擇,為什麼我們學習C語言而不是別的。

  • 首先因為C本身是非常優秀的,他是世界上最偉大的程式語言之一。許多人認為C語言的產生標誌著現代計算機語言時代的開始。它成功地綜合處理了長期困擾早期語言的矛盾屬性。C語言是功能強大、高效的結構化語言,簡單易學,而且它還包括一個無形的方面:它是程式設計師自己的語言。它的設計、實現、開發由真正的從事程式設計工作的程式設計師來完成,反映了現實程式設計工作的方法。它的特性經由實際運用該語言的人們不斷去提煉、測試、思考、再思考,使得C語言成為程式設計師們喜歡使用的語言。

  • 在程式設計規模越來越大的今天,用C往往會遭遇協作型的問題,而C++在保持了C的高效的同時,實現了大規模協作的可能,因而成為了真正工業化的語言。

  • C/C++的優秀,使得他是主流的,在20世紀70年代末和80年代初,C成為了主流的計算機程式語言,至今仍被廣泛使用。今天幾乎所有的作業系統、大部分的(大於70%)的應用軟體,90%以上的大型遊戲都是用C/C++編寫的。

  • 在對執行速度和資源佔用有嚴格要求的領域,比如遊戲、即時控制、嵌入系統,基本都是C語言內嵌組合語言的天下。今天只有一種語言的效能比C強,那就是彙編,優化過的C程式的速度大約是彙編的95%-98%。但彙編基本不是常人用的。所以實際上C就是最快的語言

  • 主流的就意味著資料豐富。不論是程式設計時所需要的文件,還是學習的示例程式碼,甚至是平臺提供的介面和庫,C/C++語言版本都是最豐富的。業界的演算法研究理論研討,大部分都是C/C++語言,開原始碼的78%以上是C/C++.任何一家硬體軟體公司,當他開發一款能夠程式設計的裝置或是軟體,必然會提供C語言的介面函式。其他的語言,就不一定有這樣的好處了。不論是計算機圖形學、加密解密還是計算機程式設計的其他領域,C/C++簡直就是程式設計界的普通話。

  • 根據International Data Corporation的統計,C/C++是全球開發者使用最多的程式語言。如果確實要投身程式設計界,不懂C/C++的話,根本就是Mission Impossible

如果你還不明白,我只需舉一個小例子。假設你現在有機會去學習一門外語,投入時間差不多,你會選擇學習英語呢,還是斯瓦希里語呢。(斯瓦希里語流行於非洲東部,為肯亞坦尚尼亞等國的官方語種)

  • 當然,並不是說其他語言不值得學習,存在即是合理,今天存在的各種語言,當然都有它存在的價值,多學一點沒有壞處。沒有人禁止你在學會英語的基礎上再學習法語日語等等。況且為了找工作等現實原因,學習其他語言也是非常正常和必要的。
  • 無論過去、現在還是將來,天底下不存在哪一門語言非學不可才能成為高手,思想最重要,“不會XXX語言不算真正的高手”之類的言論實在無聊之至。學C/C++,主要還是通過他學習程式設計思想。真正的武林高手,難道會侷限於手裡的那把大劍嗎。

但我們還是強烈建議初學者從C語言開始,因為除了上面所提的好處,C語言還足夠的簡單。初學者或許會覺得C很難,但請記住,那些是程式設計之難,不是C之難。當你學過三種以上語言的時候,就會越發體會到C的簡單。

程式設計時什麼東西最重要—-原始碼

  • 按照一般程式語言的規則編寫的程式通常都是文字形式的,雖然還不能直接執行,但可以轉換成可執行的程式,它是真正程式的源頭,於是被稱為原始碼。

  • 程式設計的主要工作就是在製造原始碼。由於原始碼幾乎人人都能看懂,而原始碼又可以生成真正的程式,所以取得了原始碼,就相當於取得了程式的一切,包括程式本身和程式背後的思想。基於此,大型軟體公司要把他們的原始碼嚴密的保護起來,而開源組織的第一條規則就是開放原始碼。而作為初學者的你,請妥善保管你所寫下的每一段原始碼,這都是你積累的財富。

能推薦幾本好書麼

  • 當然,FAQ的目的之一就是這個。我將分別介紹純C、C++以及widows程式設計、資料結構演算法以及圖形庫等等的教材。市場上這些主題中任意一個的教材都是汗牛充棟,讀都讀不完。不過很顯然,大家都公認的經典,也只是那麼寥寥數本而已。下面推薦的都是這樣的著作,當然總是有好作品在不斷推出,我這裡不可能把他們都列舉出來,你可以用自己的犀利的目光把他們挑出來。

  • 首先是純C的教材

  • 第一本:H.M.DeitelP.J.Deitel的《C HOW TO PROGRAM》(C程式設計教程)。作者是父子,從事語言教材的編寫合計超過40年,本書被美國眾多高校選用為教材,既可入門也可翻閱,甚好。本FAQ作者認為如果你只打算看一本的話,那就選他好了。

  • 第二本:Brian W.KernighanDennis M.Ritchie《The C Programming Language 》(C程式設計語言)。此書簡稱K&R,由C語言的建立者撰寫,是全球銷售最多的C語言教材,其品質不容置疑。不過不適合入門,適於在入門之後鞏固提高。實體書有原版和譯本購買,電子版英文較多。

  • 第三本:譚浩強《C程式設計》。
    優點在於,面向中國學生,語言易於理解,而且全書篇幅小,看過的人多,容易找到人請教。但是各方面的概念不深入,淺嘗輒止,實際上還有些小錯誤,不是很嚴謹。因此適合第一次入門學習,例題做完基本就可以拋棄了。有實體書和電子版下載。同時配套有習題集和習題解答,適合自學。

  • 第六本:Kenneth A.Reek《C和指標》。
    進階讀物,把指標一章演繹為一本書可見其技術精度。指標是C的靈魂,能領會本書中的理念,才能算是真正明白了C指標的奧妙,才算懂得了C。

  • 第七本:Andrew Koenig《C陷阱與缺陷》。
    進階讀物,在認真讀完上面的入門書之前,暫勿閱讀。本書暢銷14年曆久不衰,足證品質。

  • 最後一本:ISO C89規範/C99規範。
    一切關於C語言的疑問,只有一件東西最權威,那就是ISO的規範。但這不是正式出版物,是類似法律文字的技術說明,而且只有英文版。新手閱讀,提防吐血而亡。

END