C語言簡介
1. C語言的起源
C 語言是一種高級語言,最初由 Dennis M. Ritchie [1] 為了開發(fā)一個操作系統(tǒng)而設(shè)計,最早在 1972 年在 DEC PDP-11 計算機上被首次實現(xiàn)。
2. 一次不務正業(yè)的發(fā)明
C 語言的發(fā)明和很多偉大的發(fā)明一樣,都是一個人或者幾個人不務正業(yè)閑著沒事偶然間發(fā)明的。據(jù)說當時有一個年輕人為了能夠在一臺上機費更便宜的計算機上愉快的進行兩人對戰(zhàn)游戲,但不幸的是,這臺機器上原有的操作系統(tǒng)只能支持一個人在線游戲,于是這位熱愛游戲的年輕人不得不重新為這臺機器編寫一個新的操作系統(tǒng),可以支持多用戶,這樣大家就可以一起同時在線玩這個游戲了。而在編寫這個操作系統(tǒng)的過程中,他們對 B 語言進行了升級,于是 C 語言誕生了。
這個發(fā)明 C 語言的年輕人叫丹尼斯?里奇 Dennis M. Ritchie [1]。C 語言派生自 BCPL 語言,并且 C 語言對 BCPL 語言有了長足的擴展。因為 BCPL 簡稱為 B 語言,因此 C 語言就采用了字母表中的下一個字母來作為語言的名稱。講真這名字起得夠隨意的,不過話說回來了 B 語言這名字好像就是來自 A 語言的,有興趣的同學可以去了解一下這三門語言之間的淵源,在這里我們就不多贅述了。
下面是一個 C 語言發(fā)展歷史的列表:
語言 | 年份 | 開發(fā)者 |
---|---|---|
Algol | 1960 | International Group |
BCPL | 1967 | Martin Richard |
B | 1970 | Ken Thompson |
Traditional C | 1972 | Dennis Ritchie |
K & R C | 1978 | Kernighan & Dennis Ritchie |
ANSI C | 1989 | ANSI Committee |
ANSI/ISO C | 1990 | ISO Committee |
C99 | 1999 | Standardization Committee |
3. C 語言的應用
了解了發(fā)明過程就大致知道了 C 語言的應用場景。基本的應用場景是操作系統(tǒng)的編寫。
當然現(xiàn)在 C 語言的應用已經(jīng)大大超出了這個范圍。因為 C 語言與生俱來的特性是很容易與底層硬件打交道,所以目前 C 語言大量應用在需要直接硬件交互的場景。比如最近很多的物聯(lián)網(wǎng)中的嵌入式設(shè)備,底層驅(qū)動,高性能計算,游戲后端服務,圖形處理等等。
但是由于 C 語言不支持原生的面向?qū)ο蟮拈_發(fā)模式,因此有人說過,對于 C 語言,最大的工程就是開發(fā)一個操作系統(tǒng)。
如果你想開發(fā)更為復雜的系統(tǒng),請使用別的語言。但是這不代表 C 語言已經(jīng)過時了。恰恰相反, C 語言正在我們的生活中發(fā)揮著比以前更為重要的角色,你的手機,你的身邊的智能終端,甚至你家的掃地機器人,都無時不刻都有 C 語言的身影。
4. C 語言的特點
C 語言有如下的特點:
- 代碼簡潔不繁瑣;
- 具有良好的可移植性,代碼與機器底層獨立(相對于匯編語言而言);
- 屬于中層編程語言(底層的為匯編語言等,高層的為 Java 語言等);
- 結(jié)構(gòu)化語言;
- 豐富的程序庫可以使用;
- 可以直接管理內(nèi)存;
- 運行速度快;
- 提供了指針操作;
- 可以使用遞歸;
- 具有良好的擴展性。
5. C 語言的幾個主要版本
從 C 語言發(fā)明到現(xiàn)在經(jīng)歷了如下的標準:
版本 | 標準 | 發(fā)布日期 |
---|---|---|
K&R | n/a | 1978-02-22 |
C89 | ANSI X3.159-1989 | 1989-12-14 |
C90 | ISO/IEC 9899:1990 | 1990-12-20 |
C95 | ISO/IEC 9899/AMD1:1995 | 1995-03-30 |
C99 | ISO/IEC 9899:1999 | 1999-12-16 |
C11 | ISO/IEC 9899:2011 | 2011-12-15 |
目前 C 語言執(zhí)行的標準是 ISO/IEC 9899:2011,我們在課程中也會遵循此標準來完成代碼。
6. 我們?yōu)槭裁匆獙W習 C 語言
如果你想要從事下面的工作,那么 C 語言將是你非常好的一個選擇:
- 從事需要直接操作操作硬件的編程的嵌入式設(shè)備開發(fā),不需要操作系統(tǒng)的支持。比如我們常見的冰箱,洗衣機等等的控制;
- 嵌入式操作系統(tǒng)和實時操作環(huán)境下的開發(fā);
- 基于 Linux 操作系統(tǒng)下的一些應用程序。主要是中間層面應用的開發(fā),直接可以與底層硬件交互,而本身又不直接與最終用戶進行交互;
- 音頻和視頻的解碼器和編碼器等;
- 協(xié)議棧的開發(fā)。
7. 學習基礎(chǔ)
在這個教程中,大家最好能夠?qū)τ?Linux 操作系統(tǒng)有使用經(jīng)驗。有簡單的 Shell 命令使用經(jīng)驗。我們遇到的所有的操作基本都是通過命令行來進行的。雖然我也很喜歡圖形界面操作,這也是趨勢,但是 C 語言目前主要的應用場景都是在 Linux 下,所以大家最好學習一下相關(guān)的知識。