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