本文目錄一覽:
- 1、C語言的發展史是怎樣的?
- 2、c語言的發展史
- 3、簡述C語言的發展
- 4、c語言程序設計的發展過程
- 5、計算機c語言發展歷程
C語言的發展史是怎樣的?
發展史:
C語言的祖先是BCPL語言。
1967年,劍橋大學的 Martin Richards 對CPL語言進行了簡化,於是產生了BCPL(Basic Combined Pogramming Language)語言。
1970年,美國貝爾實驗室的 Ken Thompson。以BCPL語言為基礎,設計出很簡單且很接近硬體的B語言(取BCPL的首字母)。並且他用B語言寫了第一個UNIX操作系統。
在1972年,美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
為了使UNIX操作系統推廣,1977年Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。
1978年由美國電話電報公司(ATT)貝爾實驗室正式發表了C語言。
1990年,國際標準化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標準(ISO9899-1990)。
1994年,ISO修訂了C語言的標準。
1995年,ISO對C90做了一些修訂,即「1995基準增補1(ISO/IEC/9899/AMD1:1995)」。
1999年,ISO有對C語言標準進行修訂,在基本保留原來C語言特徵的基礎上,針對應該的需要,增加了一些功能,尤其是對C++中的一些功能,命名為ISO/IEC9899:1999。
2001年和2004年先後進行了兩次技術修正。
目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則有略有差別。
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有彙編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。
它的應用範圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。
c語言的發展史
C語言,是一種通用的、過程式的編程語言,廣泛用於系統與應用軟體的開發。具有高效、靈活、功能豐富、表達力強和較高的移植性等特點,在程序員中備受青睞。
C語言是由UNIX的研製者丹尼斯·里奇(Dennis Ritchie)於1970年 由 肯·湯普遜(Ken Thompson)所研製出的B語言的基礎上發展和完善起來的。目前,C語言編譯器普遍存在於各種不同的操作系統中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設計影響了許多後來的編程語言,例如C++、Objective-C、Java、C#等。
後來於1980年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標準局(American National Standard Institution)為C語言訂定了一套完整的國際標準語法,稱為ANSI C,作為C語言的標準。1980年代至今的有關程序開發工具,一般都支持符合ANSI C的語法。
C語言是一個程序語言,設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言也很適合搭配彙編語言來使用。儘管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標準規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
早期發展
C語言最早是由丹尼斯·里奇為了在PDP-11電腦上運行的UNIX系統所設計出來的編程語言,第一次發展在1969年到1973年之間。之所以被稱為「C」是因為C語言的很多特性是由一種更早的被稱為B語言的編程語言中發展而來。早期操作系統的核心大多由彙編語言組成,隨著C語言的發展,C語言已經可以用來編寫操作系統的核心。1973年,Unix操作系統的核心正式用C語言改寫,這是C語言第一次應用在操作系統的核心編寫上。
KR C
1978年,丹尼斯·里奇(Dennis Ritchie)和布萊恩·柯林漢(Brian Kernighan)合作出版了《C程序設計語言》的第一版。書中介紹的C語言標準也被C語言程序員稱作「KR C」,第二版的書中也包含了一些ANSI C的標準。KR C主要介紹了以下特色:
結構(struct)類型
長整數(long int)類型
無符號整數(unsigned int)類型
把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道用戶要處理i = -10還是i =- 10,使得處理上產生混淆。
即使在後來ANSI C標準被提出的許多年後,KR C仍然是許多編譯器的最低標準要求,許多老舊的編譯仍然運行KR C的標準。
ANSI C 和 ISO C
1989年,C語言被 ANSI 標準化(ANSI X3.159-1989)。標準化的一個目的是擴展KR C。這個標準包括了一些新特性。在KR出版後,一些新特性被非官方地加到C語言中。
void 函數
函數返回 struct 或 union 類型
void * 數據類型
在ANSI標準化自己的過程中,一些新的特性被加了進去。ANSI也規定了一套標準函數庫。ANSI ISO(國際標準化組織)成立 ISO/IEC JTC1/SC22/WG14 工作組,來規定國際標準的C語言。通過對ANSI標準的少量修改,最終通過了 ISO 9899:1990。隨後,ISO標準被 ANSI 採納。
傳統C語言到ANSI/ISO標準C語言的改進包括:
增加了真正的標準庫
新的預處理命令與特性
函數原型允許在函數申明中指定參數類型
一些新的關鍵字,包括 const、volatile 與 signed
寬字元、寬字元串與位元組多字元
對約定規則、聲明和類型檢查的許多小改動與澄清
WG14工作小組之後又於1995年,對1985年頒布的標準做了兩處技術修訂(缺陷修復)和一個補充(擴展)。下面是 1995 年做出的所有修改:
3 個新的標準庫頭文件 iso646.h、wctype.h 和 wchar.h
幾個新的記號與預定義宏,用於對國際化提供更好的支持
printf/sprintf 函數一系列新的格式代碼
大量的函數和一些類型與常量,用於多位元組字元和寬位元組字元
C99在ANSI的標準確立後,C語言的規範在一段時間內沒有大的變動,然而C++在自己的標準化創建過程中繼續發展壯大。《標準修正案一》在1995年為C語言創建了一個新標準,但是只修正了一些C89標準中的細節和增加更多更廣的國際字符集支持。不過,這個標準引出了1999年ISO 9899:1999的發表。它通常被稱為C99。C99被ANSI於2000年3月採用。
在C99中包括的特性有:
增加了對編譯器的限制,比如源程序每行要求至少支持到 4095 位元組,變數名函數名的要求支持到 63 位元組(extern 要求支持到 31)。
增強了預處理功能。例如:
宏支持取可變參數 #define Macro(…) __VA_ARGS__
使用宏的時候,允許省略參數,被省略的參數會被擴展成空串。
支持 // 開頭的單行注釋(這個特性實際上在C89的很多編譯器上已經被支持了)
增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool
支持 long long, long double _Complex, float _Complex 等類型
支持不定長的數組,即數組長度可以在運行時決定,比如利用變數作為數組長度。聲明時使用 int a[var] 的形式。不過考慮到效率和實現,不定長數組不能用在全局,或 struct 與 union 里。
變數聲明不必放在語句塊的開頭,for 語句提倡寫成 for(int i=0;i100;++i) 的形式,即i 只在 for 語句塊內部有效。
允許採用(type_name){xx,xx,xx} 類似於 C++ 的構造函數的形式構造匿名的結構體。
初始化結構的時候允許對特定的元素賦值,形式為:
struct {int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是對 .c,.d 賦值的
格式化字元串中,利用 \u 支持 unicode 的字元。
支持 16 進位的浮點數的描述。
printf scanf 的格式化串增加了對 long long int 類型的支持。
浮點數的內部數據描述支持了新標準,可以使用 #pragma 編譯器指令指定。
除了已有的 __line__ __file__ 以外,增加了 __func__ 得到當前的函數名。
允許編譯器化簡非常數的表達式。
修改了 / % 處理負數時的定義,這樣可以給出明確的結果,例如在C89中-22 / 7 = -3, -22 % 7 = -1 ,也可以-22 / 7= -4, -22 % 7 = 6。 而C99中明確為 -22 / 7 = -3, -22 % 7 = -1,只有一種結果。
取消了函數返回類型默認為 int 的規定。
允許 struct 定義的最後一個數組不指定其長度,寫做 [] 。
const const int i 將被當作 const int i 處理。
增加和修改了一些標準頭文件,比如定義 bool 的 stdbool.h ,定義一些標準長度的 int 的 inttypes.h ,定義複數的 complex.h ,定義寬字元的 wctype.h ,類似於泛型的數學函數 tgmath.h, 浮點數相關的 fenv.h。 在stdarg.h 增加了 va_copy 用於複製 … 的參數。time.h 里增加了 struct tmx ,對 struct tm 做了擴展。
輸入輸出對寬字元以及長整數等做了相應的支持。
簡述C語言的發展
C語言是國際上廣泛流行的、很有發展前途的計算機高級語言。它適合作為系統描述語言,即可用來編寫系統軟體,也可用來編寫應用軟體。
早期的操作系統等系統軟體主要是用彙編語言編寫的(包括 UNIX操作系統在內)。由於彙編語言依賴於計算機硬體,程序的可讀性和可移植性都比較差。為了提高可讀性和可移植性,最好改用高級語言,但一般的高級語言難以實現彙編語言的某些功能(彙編語言可以直接對硬體進行操作),例如:對內存地址的操作、位操作等)。人們設想能否找到一種既具有一般高級語言特性,又具有低級語言特性的語言,集它們的優點於一身。於是,C語言就在這種情況下應運而生了。
C語言是在B語言的基礎上發展起來的,它的根源可以追溯到ALGOL 60。 1960年出現的ALGOL 60是一種面向問題的高級語言,它離硬體比較遠,不宜用來編寫系統程序。1963年英國的劍橋大學推出了CPL(CombinedProgram- ming Language)語言。CPL語言在ALGOL 60的基礎上接近了硬體一些,但規模比較大,難以實現。1967年英國劍橋大學的Matin Richards對 CPL語言作了簡化,推出了BCPL(Basic Combined Programming Language)語言。1970年美國貝爾實驗室的 Ken Thompson以 BCPL語言為基礎,又作了進一步簡化,設計出了很簡單的而且很接近硬體的 B語言( 取 BCPL的第一個字母),並用 B語言寫第一個UNIX操作系統,在PDP-7上實現。 1971年在PDP-11/20上實現了B語言,並寫了UNIX操作系統。但B語言過於簡單,功能有限。1972年至 1973年間,貝爾實驗室的 D.M.Ritchie在B語言的基礎上設計出了C語言(取 BCPL的第二個字母)。C語言既保持了BCPL和B語言的優點(精練、接近硬體),又克服了它們的缺點(過於簡單、數據無類型等)。 最初的C語言只是為描述和實現UNIX操作系統提供一種工作語言而設計的。1973年,K.Thom- pson和D.M.ritchie兩人合作把UNIX的90%以上用 C改寫(UNIX第5版。原來的 UNIX操作系統是1969年由美國的貝爾實驗室的 K.Thompson和D.M.Ritchie開發成功的,是用彙編語言寫的)。
後來,C語言多次作了改進,但主要還是在貝爾實驗室內部使用。直到1- 975年UNIX第6版公布後 ,C語言的突出優點才引起人們普遍注意。1977年出現了不依賴於具體機器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其它機器時所做的工作大大簡化了,這也推動了UNIX操作系統迅速地在各種機器上實現。例如,VAX,ATT等計算機系統都相繼開發了UNIX。隨著 UNIX的日益廣泛使用,C語言也迅速得到推廣。C語言和UNIX可以說是一對孿生兄弟,在發展過程中相輔相成。1978年以後,C語言已先後移植到大、中、小、微型機上,已獨立於UNIX和PDP了。現在C語言已風靡全世界,成為世界上應用最廣泛的幾種計算機語言之一。
以1978年發表的UNIX第7版中的C編譯程序為基礎,Brian W.Kernighan和 Dennis M.Ritchie(合稱KR)合著了影響深遠了名著《The C Programming Lan- guage》,這本書中介紹的C語言成為後來廣泛使用的C語言版本的基礎,它被稱為標準C。1983年,美國國家標準化協會(ANSI)根據C語言問世以來各種版本對C的發展和擴充 ,制定了新的標準,稱為ANSI C。ANSI C比原來的標準C有了很大的發展。KR在1988年修改了他們的經典著作《The C Progra- mming Language》 ,按照ANSI C的標準重新寫了該書。1987年,ANSI C又公布了新標準–87 ANSI C 。目前流行的C編譯系統都是以它為基礎的
c語言程序設計的發展過程
C語言的原型ALGOL 60語言(也稱為A語言) 。
1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。
1967年,劍橋大學的Matin Richards 對CPL語言進行了簡化,於是產生了BCPL語言。
1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,並為它起了一個有趣的名字「B語言」。意思是將CPL語言煮干,提煉出它的精華。並且他用B語言寫了第一個UNIX操作系統。
而在1973年,B語言也給人「煮」了一下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
為了使UNIX操作系統推廣,1977年Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,從而使C語言成為目前世界上流行最廣泛的高級程序設計語言。
1987年,隨著微型計算機的日益普及,出現了許多C語言版本。由於沒有統一的標準,使得這些C語言之間出現了一些不一致的地方。為了改變這種情況,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準, 成為現行的C語言標準 3.C語言的主要特點 ,即經典的87 ANSI C。C語言發展迅速, 而且成為最受歡迎的語言之一,主要因為它具有強大的功能。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C語言編寫的。用C語言加上一些彙編語言子程序, 就更能顯示C語言的優勢了,象PC- DOS 、WORDSTAR等就是用這種方法編寫的。
1990年,國際化標準組織ISO(Intrernational StandardOrganization)接受了87 ANSI C為ISO C的標準(ISO9899-1990)。1994年,ISO修訂了C語言的標準。目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則略有差別。
計算機c語言發展歷程
起步
C語言的第一次發展在1969年到1973年之間。之所以被稱為「C」是因為C語言的很多特性是由一種更早的被稱為B語言的編程語言中發展而來。早期操作系統的核心大多由組合語言組成,隨著C語言的發展,C語言已經可以用來編寫操作系統的核心。1973年,Unix操作系統的核心正式用C語言改寫,這是C語言第一次應用在操作系統的核心編寫上。
KR C
1978年,丹尼斯·里奇(Dennis Ritchie)和Brian Kernighan合作出版了《C程序設計語言》的第一版。書中介紹的C語言標準也被C語言程序設計師稱作「KR C」,第二版的書中也包含了一些ANSI C的標準。KR C主要介紹了以下特色:
* 結構(struct)類型
* 長整數(long int)類型
* 無號整數(unsigned int)類型
* 把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道使用者要處理i = +10還是i =+ 10,使得處理上產生混淆。
即使在後來ANSI C標準被提出的許多年後,KR C仍然是許多編譯器的最低標準要求,許多老舊的編譯仍然運行KR C的標準。
ANSI C 和 ISO C(1985年)
1989 年,C 語言被 ANSI 標準化(ANSI X3.159-1989)。標準化的一個目的是擴展 KR C。這個標準包括了一些新特性。在 KR 出版後,一些新特性被非官方的加到 C 語言中。
* void 函數
* 函數返回 struct 或 union 類型
* void * 數據類型
* 在 ANSI 標準化自己的過程中,一些新的特性被加了進去。ANSI 也規定一套了標準函數庫。ANSI ISO(國際標準化組織)成立 ISO/IEC JTC1/SC22/WG14 工作組, 來規定國際標準的 C 語言。通過對 ANSI 標準的少量修改,最終通過了 ISO 9899:1990。隨後, ISO 標準被 ANSI 採納。
傳統 C 語言 到 ANSI/ISO 標準 C 語言 的改進包括:
* 增加了真正的標準庫
* 新的預處理命令與特性
* 函數原型允許在函數申明中指定參數類型
* 一些新的關鍵字,包括 const、volatile 與 signed
* 寬字元、寬字元串與位元組多字元
* 對約定規則、聲明和類型檢查的許多小改動與澄清
ANSI C 和 ISO C(1995年)
作為對標準的維護與更新,WG14 工作小組在 1995年, 對 1985 年頒布的標準做了兩處技術修訂(缺陷修復)和一個補充(擴展)。下面是 1995 年做出的所有修改:
* 3 個新的標準庫頭文件 iso646.h、wctype.h 和 wchar.h
* 幾個新的記號與預定義宏,用於對國際化提供更好的支持
* printf/sprintf 函數一系列新的格式代碼
* 大量的函數和一些類型與常量,用於多位元組字元和寬位元組字元
C99
它被ANSI於2000年三月採用。
在C99中包括的特性有:
* 對編譯器限制增加了,比如源程序每行要求至少支持到 4095 位元組,變數名函數名的要求支持到 63 位元組 (extern 要求支持到 31)
* 預處理增強了。例如:
o 宏支持取參數 #define Macro(…) __VA_ARGS__
o 使用宏的時候,參數如果不寫,宏里用 #,## 這樣的東西會擴展成空串。(以前會出錯的)
o 支持 // 行注釋(這個特性實際上在C89的很多編譯器上已經被支持了)
* 增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool
o 支持 long long, long double _Complex, float _Complex 這樣的類型
* 支持 : : % % %: %:%: ,等等奇怪的符號替代,DE 里提過這個
* 支持了不定長的數組。數組的長度就可以用變數了。聲明類型的時候呢,就用 int a[*] 這樣的寫法。不過考慮到效率和實現,這玩意並不是一個新類型。所以就不能用在全局裡,或者 struct union 裡面,如果你用了這樣的東西,goto 語句就受限制了。
* 變數聲明不必放在語句塊的開頭,for 語句提倡這麼寫 for(int i=0;i100;++i) 就是說,int i 的聲明放在裡面,i 只在 for 裡面有效。
* 當一個類似結構的東西需要臨時構造的時候,可以用 (type_name){xx,xx,xx} 這有點像 C++ 的構造函數
初始化結構的時候現在可以這樣寫:
*
struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是對 .c,.d 賦值的
* 字元串裡面,\u 支持 unicode 的字元
* 支持 16 進位的浮點數的描述
* 所以 printf scanf 的格式化串多支持了 ll / LL (VC6 里用的 I64) 對應新的 long long 類型。
* 浮點數的內部數據描述支持了新標準,這個可以用 #pragma 編譯器指定
* 除了已經有的 __line__ __file__ 以外,又支持了一個 __func__ 可以得到當前的函數名
* 對於非常數的表達式,也允許編譯器做化簡
* 修改了對於 / % 處理負數上的定義,比如老的標準里 -22 / 7 = -3, -22 % 7 = -1 而現在 -22 / 7 = -4, -22 % 7 = 6
* 取消了不寫函數返回類型默認就是 int 的規定
* 允許 struct 定義的最後一個數組寫做 [] 不指定其長度描述
* const const int i; 將被當作 const int i; 處理
* 增加和修改了一些標準頭文件, 比如定義 bool 的 stdbool.h 定義一些標準長度的 int 的 inttypes.h 定義*複數的 complex.h 定義寬字元的 wctype.h 有點泛型味道的數學函數 tgmath.h 跟浮點數有關的 fenv.h。stdarg.h 里多了一個 va_copy 可以複製 … 的參數。time.h 里多了個 struct tmx 對 struct tm 做了擴展
* 輸入輸出對寬字元還有長整數等做了相應的支持
* 但是各個公司對C99的支持所表現出來的興趣不同。當GCC和其它一些商業編譯器支持C99的大部分特性的時候,微軟和Borland卻似乎對此不感興趣。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238107.html