给你三个必须要学C语言的理由!
C語言概述
One man’s constant is another man’s variable。1
本篇GitHub已收錄,點(diǎn)一個 star 你我就是并肩作戰(zhàn)的戰(zhàn)友!
https://github.com/hairrrrr/C-CrashCourse
本節(jié)內(nèi)容
C語言的歷史,C語言的優(yōu)缺點(diǎn)以及如何高效的使用C語言
C語言還值得學(xué)習(xí)嗎?C語言查錯的工具
思維導(dǎo)圖
C語言的歷史
起源
C語言是貝爾實(shí)驗(yàn)室的 Ken Thompson, Dennis Ritchie 等人開發(fā)的 UNIX 操作系統(tǒng)的“副產(chǎn)品”。
與同時代的其他操作系統(tǒng)一樣,UNIX 系統(tǒng)最初也是用匯編語言寫的。用匯編語言編寫的程序往往難以調(diào)試和改進(jìn),UNIX 操作系統(tǒng)也不例外。Thompson 意識到需要用一種高級的編程語言來完成 UNIX 系統(tǒng)未來的開發(fā),于是他設(shè)計了一種小型的 B語言。Thompson 的 B語言是在 BCPL語言(20世紀(jì)60年代中期產(chǎn)生的一種系統(tǒng)編程語言)的基礎(chǔ)上開發(fā)的,而 BCPL語言又可以追溯到最早(且影響深遠(yuǎn))的語言之一——Algol 60語言。
1970年,貝爾實(shí)驗(yàn)室為 UNIX 項(xiàng)目爭取到了一臺 PDP-11 計算機(jī)。當(dāng) B語言經(jīng)過改進(jìn)并能夠在 PDP-11 計算機(jī)上成功運(yùn)行后,Thompson 用 B語言重新編寫了部分 UNIX 代碼。
到了1971年,B語言已經(jīng)明顯不適合 PDP-11 計算機(jī)了,于是 Ritchie 著手開發(fā) B語言的升級版。最初他將新開發(fā)的語言命名為 NB語言(意味New B),但是后來新語言越來越偏離 B語言,于是他將其改名為 C語言。
到1973年,C語言已經(jīng)足夠穩(wěn)定,可以用來重新編寫 UNIX 系統(tǒng)了。
標(biāo)準(zhǔn)化
C語言在20世紀(jì)七十年代(尤其是1977年到1979)持續(xù)發(fā)展。這一時期出現(xiàn)了第一本有關(guān) C語言的書。Brian Kernighan 和 Dennis Ritchie 合作編寫的 The C Programming Language 于1978年出版,并迅速成為 C程序員必讀的“圣經(jīng)”。由于當(dāng)時沒有 C語言的正式標(biāo)準(zhǔn),這本書就成為了事實(shí)上的標(biāo)準(zhǔn),編程愛好者把它稱為“K&R”或者“白皮書”。(公眾號后臺回復(fù):【KR】即可獲得)
隨著C語言的迅速普及,一系列問題也接踵而至。首先, K&R 對一些語言特性描述得非常模糊,以至于不同編譯器對這些特性會做出不同的處理。而且,K&R 也沒有對屬于 C語言的特性和屬于 UNIX 系統(tǒng)的的特性進(jìn)行明確的區(qū)分。更糟糕的是,K&R 出版后 C語言仍然在不斷變化,增加了一些新特性并除去了一些舊特性。很快,C語言需要一個全面,準(zhǔn)確的最新描述開始成為共識。
C89/C90
1983年,在美國國家標(biāo)準(zhǔn)協(xié)會(ANSI)的推動下(ANSI 于此年組建了一個委員會稱為 X3Jll),美國開始制定本國的 C語言標(biāo)準(zhǔn)。
1988年完成并于1989年12月正式通過的 C語言標(biāo)準(zhǔn)成為 ANSI 標(biāo)準(zhǔn) X3.159-1989。
1990年,國際標(biāo)準(zhǔn)化組織(ISO)通過了此項(xiàng)標(biāo)準(zhǔn),將其作為 ISO/IEC 9899:1990 國際標(biāo)準(zhǔn)(中國國家標(biāo)準(zhǔn)為 GB/T 15272—1994)。
我們把這一C語言版本稱為 C89 或 C90,以區(qū)別原始的 C語言版本。
委員會在制定的指導(dǎo)原則中的一條寫道:保持 C 的精神。委員會在描述這一精神時列出了一下幾點(diǎn):
- 信任程序員
- 不要妨礙程序員做需要做的事
- 保持語言精煉簡單
- 只提供一種方法執(zhí)行一項(xiàng)操作
- 讓程序運(yùn)行更快,即使不能保持其可移植性
在最后一點(diǎn)上,標(biāo)準(zhǔn)委員會的用意是:作為實(shí)現(xiàn),應(yīng)該針對目標(biāo)計算機(jī)來定義最合適的某特定操作,而不是強(qiáng)加一個抽象,統(tǒng)一的定義。在學(xué)習(xí) C語言的過程中,許多方面都反映了這一哲學(xué)思想。
C99
1995 年,C語言發(fā)生了一些改變。
1999年通過的 ISO/IEC 9899:1999 新標(biāo)準(zhǔn)中包含了一些更重要的改變,這一標(biāo)準(zhǔn)所描述的語言通常稱為 C99
此次改變,委員會的用意不是在C語言中添加新的特性,而是為了達(dá)到新的目標(biāo)。
其他方面的改變則更為保守,如,盡量讓C90,C++兼容,讓語言在概念上保持簡單。
雖然改標(biāo)準(zhǔn)已經(jīng)發(fā)布了很長時間,但并非所有編譯器都完全支持C99的所有改動。因此,你有可能發(fā)現(xiàn) C99 的一些改動在自己的系統(tǒng)中不可用,或者需要改變編譯器的設(shè)置才可用。
C11
2011年,C11標(biāo)準(zhǔn)問世。
基于C的語言
- C++:包含所有C的特性
- Java:基于C++,所以也繼承了C的許多特性
- C#:由C++與java發(fā)展起來的較新的語言
- Perl:最初是一種簡單的腳本語言,在發(fā)展過程中采用了C的許多特性
C語言還值得學(xué)嗎?
答案是肯定的。
第一,學(xué)習(xí)C有助于更好的理解C++,Java,C#,Perl以及其他基于C的特性的語言。第一開始就學(xué)習(xí)其他語言的程序員往往不能很好的掌握繼承自C語言的基本特性。
第二,目前仍有許多C程序,我們需要讀懂并維護(hù)這些代碼。
第三,C語言仍廣泛應(yīng)用于新軟件的開發(fā),特別是在內(nèi)存或處理能力受限的情況下以及需要使用C語言簡單特性的地方。
C語言的優(yōu)缺點(diǎn)
與其他任何一種編程語言一樣,C語言也有自己的優(yōu)缺點(diǎn)。這些優(yōu)缺點(diǎn)都源于該語言的最初用途(編寫操作系統(tǒng)和其它系統(tǒng)軟件)和它自身的基礎(chǔ)理論體系。
- C語言是一種底層語言 為了適應(yīng)系統(tǒng)編程的需要,C語言提供了對機(jī)器級概念(例如,字節(jié)和地址)的訪問,而這些都是其他編程語言試圖隱藏的內(nèi)容。
- C語言是一種小型語言 與許多其他編程語言相比,C語言提供了一套更有限特性集合。(在K&R第二版的參考手冊中僅用49頁就描述了整個C語言。)為了使特性較少,C語言在很大程度上依賴一個標(biāo)準(zhǔn)函數(shù)的“庫”。
- C是一種包容性語言 C假設(shè)用戶知道自己在干什么,因此它提供了比其他許多語言更廣闊的自由度。此外,C語言不像其他語言那樣強(qiáng)制進(jìn)行詳細(xì)的錯誤檢查。
C語言的優(yōu)點(diǎn)
C語言的眾多優(yōu)點(diǎn)解釋了C語言為何如此流行。
-
高效 高效性是C語言與生俱來的優(yōu)點(diǎn)之一。發(fā)明C語言就是為了編寫那些以往由匯編語言編寫的程序,所以對C語言來說,能夠在有限的內(nèi)存空間快速運(yùn)行就顯得至關(guān)重要。
-
可移植 當(dāng)程序必須在多種機(jī)型(從個人計算機(jī)到超級計算機(jī))上運(yùn)行時,常常會用C語言來編寫。
原因一:C語言沒有分裂成不兼容的多種分支。這主要?dú)w功于C語言早期與UNIX系統(tǒng)的結(jié)合以及后來的ANSI/ISO標(biāo)準(zhǔn)。
原因二:C語言編譯器規(guī)模小且容易編寫,這使得它們得以廣泛應(yīng)用。
原因三:C語言的自身特性也支持可移植性(盡管它沒有阻止程序員編寫不可移植的程序)。
-
功能強(qiáng)大 C語言擁有一個龐大的數(shù)據(jù)類型和運(yùn)算符集合,這個集合使得C語言具有強(qiáng)大的表達(dá)能力,往往寥寥幾行代碼就可以實(shí)現(xiàn)許多功能。
-
靈活 C語言最初設(shè)計是為了系統(tǒng)編程,但沒有固有的約束將其限制在此范圍內(nèi)。C語言現(xiàn)在可以用于編寫從嵌入式系統(tǒng)到商業(yè)數(shù)據(jù)處理的各種應(yīng)用程序。
-
標(biāo)準(zhǔn)庫 C語言的突出優(yōu)點(diǎn)就是它具有標(biāo)準(zhǔn)庫,該標(biāo)準(zhǔn)庫包括了數(shù)百個可以用于輸入/輸出,字符串處理,儲存分配以及其他實(shí)用操作的函數(shù)。
-
與UNIX的集成 C語言在與UNIX系統(tǒng)(包括Linux)結(jié)合方面特別強(qiáng)大。事實(shí)上,一些UNIX工具甚至假設(shè)用戶是了解C語言的。
C語言的缺點(diǎn)
- C語言容易隱藏錯誤 C語言的靈活性使得用它編程出錯的概率極高。在用其他語言時可以發(fā)現(xiàn)的錯誤,C語言的編譯器卻無法檢查到。更糟糕的是,C語言還包含大量不易察覺的隱患。
- C程序可能難以理解 C程序的簡明扼要與靈活性,可能導(dǎo)致程序員編寫出除了自己別人無法讀懂的代碼。
- C程序可能難以修改 如果在設(shè)計中沒有考慮到維護(hù)的問題,那么C編寫的大型程序可能很難修改?,F(xiàn)代的編程語言通常提供“類”和“包”之類的語言特性,這樣的特性可以把大的程序分解成許多更容易管理的模塊。遺憾的是,C語言恰恰缺少這樣的特性。
高效的使用C語言
要高效的使用C語言,就需要利用C語言優(yōu)點(diǎn)的同時盡量避免它的缺點(diǎn),以下給出一些建議。
- 學(xué)習(xí)如何規(guī)避C語言的缺陷
- 使用軟件工具使程序更可靠(詳細(xì)見下文)
- 利用現(xiàn)有的代碼庫 使用C語言的一個好處是其他許多人也在使用C。把別人編寫好的代碼用于自己的程序是一個非常好多主意。C代碼通常被打包成庫(函數(shù)的集合)。獲取適當(dāng)?shù)膸旒瓤梢源蟠鬁p少錯誤,也可以節(jié)省很多編程工作。
- 采用一套切合實(shí)際的編碼規(guī)范 良好的編碼習(xí)慣和規(guī)范易于自己和他人對自己代碼的閱讀和修改。(公眾號回復(fù):【編碼規(guī)范】,讓你學(xué)會如何寫出規(guī)范的代碼。)
- 避免“投機(jī)取巧”和極度復(fù)雜的代碼。C語言鼓勵使用編程技巧。但是,過猶不及,不要對技巧毫無節(jié)制,最簡單的解決方案往往也是最難理解的。
- 緊貼標(biāo)準(zhǔn) 大多數(shù)編譯器都提供不屬于 C89/C99 標(biāo)準(zhǔn)的特征和庫函數(shù)。為了程序的可移植性,若非確有必要,最好避免這些特性和庫函數(shù)。
怎么讓程序更加安全可靠?
- 分析錯誤工具——lint
- 越界檢查工具——bounds-checker
- 內(nèi)存泄漏監(jiān)測工具——leak-finder
- 調(diào)高你的編譯器的“警告級別”
碼字不易,對你有幫助 **點(diǎn)贊/轉(zhuǎn)發(fā)/關(guān)注 **支持一下作者
微信搜公眾號:不會編程的程序圓
看更多干貨,獲取第一時間更新
以上就是本次的內(nèi)容,感謝觀看。
如果文章有錯誤歡迎指正和補(bǔ)充,感謝!
最后,如果你還有什么問題或者想知道到的,可以在評論區(qū)告訴我呦,下篇文章可以加上。
最后,關(guān)注我,看更多干貨!
我是程序圓,我們下次再見。
吾之常量,彼之變量。摘自《epigrams-on-programming》 ??
總結(jié)
以上是生活随笔為你收集整理的给你三个必须要学C语言的理由!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高速缓存对c程序的影响
- 下一篇: 升级到JUnit5的7个理由