c89(c90)、c99、c11——c語言的三套標準
c語言最初由 dennis ritchie 於 1969 年到 1973 年在 at&t 貝爾實驗室裡開發出來,主要用於重新實現 unix 作業系統。此時,c語言又被稱為 k&r c。其中,k 表示 kernighan 的首字母,而 r 則是 ritchie 的首字母。
k&r c語言與後來標準化的c語言有很大差異,比如:
如果函式返回型別為 int,則 int 可省:
int my_function()
也可以寫成
my_function()
編譯器不會有任何警告,更不會報錯。
還有現在看來比較奇葩的函式定義,像我們現在定義這麼乙個函式:
void my_function(int a, char*p) {}
如果是用 k&r c 語法定義的話要寫成:
void my_function(a,p)int a; char*p; {}
k&r 的c語法中,定義乙個函式時,其形參列表先列出形參的識別符號,然後在函式宣告的後面緊跟著對形參識別符號的完整宣告,最後是函式體。這在現行標準中已經被逐步廢棄使用了。
另外,當時的第一本c語言專業書《the c programming language》也並非乙個正式的程式語言規範,但被用了許多年。
c90 標準
由於c語言被各大公司所使用(包括當時處於鼎盛時期的 ibm pc),因此到了 1989 年,c語言由美國國家標準協會(ansi)進行了標準化,此時c語言又被稱為 ansi c。
而僅過一年,ansi c 就被國際標準化組織 iso 給採納了。此時,c語言在 iso 中有了乙個官方名稱——iso/iec 9899: 1990。其中:
9899 是c語言在 iso 標準中的代號,像 c++ 在 iso 標準中的代號是 14882;
而冒號後面的 1990 表示當前修訂好的版本是在 1990 年發布的。
對 於iso/iec 9899: 1990 的俗稱或簡稱,有些地方稱為 c89,有些地方稱為 c90,或者 c89/90。不管怎麼稱呼,它們都指代這個最初的c語言國際標準。
這個版本的c語言標準作為 k&r c 的乙個超集(即 k&r c 是此標準c的乙個子集),把後來引入的許多非官方特性也一起整合了進去。其中包括了從 c++ 借鑑的函式原型(function prototypes),指向 void 的指標,對國際字符集以及本地語言環境的支援。在此標準中,儘管已經將函式定義的方式改為現在我們常用的那種方式,不過k&r的語法形式仍然相容。
c99標準
在隨後的幾年裡,c語言的標準化委員會又不斷地對c語言進行改進,到了 1999 年,正式發布了 iso/iec 9899: 1999,簡稱為 c99 標準。
c99 標準引入了許多特性,包括內聯函式(inline functions)、可變長度的陣列、靈活的陣列成員(用於結構體)、復合字面量、指定成員的初始化器、對ieee754浮點數的改進、支援不定引數個數的巨集定義,在資料型別上還增加了 long long int 以及複數型別。
毫不誇張地說,即便到目前為止,很少有c語言編譯器是完整支援 c99 的。像主流的 gcc 以及 clang 編譯器都能支援高達90%以上,而微軟的 visual studio 2015 中的c編譯器只能支援到 70% 左右。
c11標準
2007 年,c語言標準委員會又重新開始修訂c語言,到了 2011 年正式發布了 iso/iec 9899: 2011,簡稱為 c11 標準。
c11標準新引入的特徵儘管沒 c99 相對 c90 引入的那麼多,但是這些也都十分有用,比如:位元組對齊說明符、泛型機制(generic selection)、對多執行緒的支援、靜態斷言、原子操作以及對 unicode 的支援。
筆者近兩年也是在不斷地了解c語言標準委員會的最新動態(可參見:其中看到有人提出想為c語言新增物件導向的特性,包括增加類、繼承、多型等已被 c++ 語言所廣泛使用的語法特性,但是最終被委員會駁回了。因為這些複雜的語法特性並不符合c語言的設計理念以及設計哲學,況且 c++ 已經有了這些特性,c語言無需再對它們進行支援。
c語言發展歷史
取bcpl的首字母b 而設計出來的語言b語言。第乙個unix系統就是用b語言寫的。這一切都發生在偉大的貝爾實驗室。在1972年,美國貝爾實驗室的 d.m.ritchie 在b語言的基礎上最終設計出了一種新的語言,他取了bcpl的第二個字母作為這種語言的名字,這就是c語言。可移植的c語言編譯程式 的發...
C語言發展歷史
c語言是當今世界上用途最廣泛 最通用的計算機高階語言。它既可以寫出系統軟體,比如計算機作業系統,也可以寫出各種應用軟體,因此成為了應用廣泛,最流行,最受歡迎的計算機高階語言。那麼c語言究竟是怎麼發展起來的呢?語言是在 70 年代初問世的。一九七八年由美國 電報公司 at t 貝爾實驗室正式發表了 語...
C 語言的歷史
c 語言是從c語言發展而來的。c語言有很多優點,也有很多不足。如對型別匹配的檢查不夠嚴格 基本沒有支援 重用的機制 不支援物件導向等。這使得在用c語言開發大規模的軟體時,維護和擴充都比較困難。1967 年,simula 語言中第一次出現了物件導向 oo 的概念,但由於當時軟體規模還不大,技術也還不太...