(這個章節號有些糟糕,但是這樣可以隨意新增文章,又不用更改標題。我可以有0.1、0.2 也可以有0.1.1 ;-))
c語言的高可移植性需要c語言能夠在不同的機器環境(指令環境)下,實現相同的運**況。因此不同的c實現(指的是c程式的具體執行,主要是計算機對程式的「翻譯」和對資料儲存的規定)需要乙個統一的標準。
在c語言誕生的最初幾年,其實並沒有正規的c標準,但是布萊恩·科林漢(brian kernighan)和丹尼斯·里奇(dennis ritchie)在2023年共同編寫的《c語言程式設計》(the c programming language)第一版成為了c語言實際上的第乙個標準。這個標準一般稱為k&r-c 或者經典c,該書中的附錄c 語言參考手冊已經成為實現c的指導標準。
但是這乙個標準中並沒有對c語言庫的定義,我們知道,c語言對庫的依賴程度是非常高的,由於缺乏官方標準庫,unix實現提供的庫已經成為了標準庫。
這一版本的c語言還有些其他問題,如:對某些特徵的描述比較模糊,不同的編譯器可能會做差異化處理;沒有對屬於c語言的特性和unix系統的特性進行有效的區分,這個問題在20 世紀 80 年代尤為突出,那時c語言已經開始在不同的作業系統中執行了;同時,在k&r出版之後,c語言還在不斷變化。如果任由c這樣發展下去,必然會威脅到c的主要優勢——可移植性。因此,乙個全面、準確、新穎 的標準就顯得尤為重要。
美國國家標準協會(ansi)在2023年組建了乙個委員會(x3j11),並於1989 年12月正式公布了第乙個c語言標準(ansi標準:x3.159-1989),這個標準定義了c語言和c標準庫。在2023年國際標準化組織(iso)採用了這套標準(作為iso/iec 9899:1990標準)。值得注意的是 ansi-c 和 iso-c 實際上是乙個標準,ansi/iso c標準一般稱為 c89 或者 c90 ,由於該標準是由 ansi 提出並最先通過的,我們一般將該標準稱為 ansi-c。
x3j11 委員會力圖在新標準中保持c的精神,包含如下幾點:
在上面提到的最後一點,實際上指的是,針對目標計算機定義最合適的某特定操作,而不是強加乙個抽象、統一的定義。
2023年,ansi/iso 聯合委員會(c9x委員會)開始修訂c標準,最終發布了c99標準。該委員會依然遵循了 c90 的原則,新的標準的用意也不是對c語言的架構進行整改。委員會制定新標準的主要目標如下:
c99保留了c語言的精髓,但是並不是所有編譯器都遵循 c99 的實現方法。
在這次更新中,委員會針對出現的新問題和新技術做了相應的調整。如:新增了對多處理器計算機的支援。
C語言的標準化
1971年,dennis ritchie在b語言的基礎上創立了c語言。c語言自誕生之後,不斷被發展完善,同時吸引了越來越多的程式設計愛好者加入到c語言的陣營。它的流行迫切需要對其進行標準化。1978年,dennis ritchie與brian kernighan合作寫了第一本有關c語言的書 the ...
c語言學習第
1.識別符號只能由數字字母下劃線構成,字母放在第一位。2.while c getchar n 用來記錄一串字元,注意括號。3.變數的作用域與生存期。變數的作用域指乙個變數在一串 中能夠起作用的範圍。生存期是指變數從生存到消亡的過程。例如 void ex int a printf d a int ma...
C語言學習 標準IO fgets fputs
char fgets char s,int size,file stream fgets函式 功能 fgets 最多從 stream 中讀取小於 size 1 個字元,並將其儲存到s指向的緩衝區 字元陣列 中。stream 可以是標準輸入,檔案 size 讀取的字元長度 返回值 讀取成功則返回指向字...