C的各個版本及其區別

2021-10-07 21:05:37 字數 2337 閱讀 4781

2023年,brian kernighan 和 dennis ritchie合著的the c programming

language 第1版是公認的c標準。它定義了c語言,但沒有定義c庫。它不是官方的標準。

這個標準化的工作在美國國家標準局(ansi)的框架中進行(1983-1988),最終結果是2023年10月頒布的ansi標準x3.159-1989,也就是後來人們所說的ansic標準。由這個標準定義的c語言被稱作ansi c。

ansi c標準很快被採納為國際標準和各國的標準。國際標準為iso/iec9899-1990,中國國家標準gb/t 15272-94是國際iso標準的中文翻譯。

國際標準化組織(iso)採用了這套c標準,因此iso c和ansi c是完全相同的標準。

ansi於2023年批准該標準,因此通常稱之為c89。

iso於2023年批准該標準,因而又有c90的叫法。

c99 (以前稱為c9x )是iso / iec 9899:1999的非正式名稱,在2023年推出,被ansi於2023年3月採用。它是c程式語言標準的過去版本。 它擴充套件了以前的版本( c90 ),增加了語言和標準庫的新功能,並幫助實現更好地利用可用的計算機硬體,如ieee 754-1985浮點運算和編譯器技術,最主要的增強在數值處理上。 2023年發布的c程式語言標準的c11版本取代了c99。

c11標準是 iso/iec 9899:2011 - information technology -- programming languages -- c 的簡稱[1],曾用名為c1x。

c11標準是c語言標準的第三版,前乙個標準版本是c99標準。2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec) 旗下的c語言標準委員會(iso/iec jtc1/sc22/wg14)正式發布了c11標準[2]。

c11標準的最終定稿的草案是免費開放的,為n1570?[3]??,但是正式標準檔案需要198瑞士法郎[2]。

當前,支援此標準的主流c語言編譯器有:gcc、clang、intel c++ compiler等。

對於原始檔內部的識別符號,有效的最小長度擴充到31個字元。檔案間連線時,識別符號的最小有效長度仍然為6個字元。(許多實現都支援更大的長度)

增加了幾個新關鍵字:void,const,volatile,signed,enum。拋棄了老關鍵字entry。

在換意字元 \ 之後寫非規定的序列,其作用確定為無定義。

規定8和9都不是八進位制數的合法字元。

引進了數的字尾字元:整數的u和l,浮點數的f和l。

規定連續出現的字串常量將被拼接在一起。

引進了「寬字元」的概念。

將字元也確定為帶符號(signed)和不帶符號(unsigned)的。

丟棄了long float(原來作為double的同義詞)。

引入了void型別,用 (void*) 表示通用指標的型別(過去人們通常用 (char*))。

對算術型別規定了最小表示範圍。要求每個c語言系統用標頭檔案(;和;)說明實現中的具體規定。

引進了列舉定義enum。

採用了來自c++的型別修飾符,如const。

規定字串常量是不可修改的。

改變了算術型別的隱含轉換規則。

刪去了一些過時賦值運算子,如 =+。規定賦值運算子都是基本單詞,如 += 之間不能有空格分隔。

引進了與一元 - 運算子對應的一元 + 運算子。

指向函式的指標可以直接放在函式呼叫的位置,不必顯式地寫間接操作。

允許結構地整體賦值,作為函式引數和返回值傳遞。

允許將取位址運算子作用於陣列,得到的是指向有關陣列的指標。

標準規定 sizeof 運算子的返回值為 size_t 型別(某個無符號整型),這一型別在標準標頭檔案;裡定義。同時在那裡定義的還有 ptrdiff_t 型別,它是指標減運算的結果型別。

規定取位址運算子不能作用於 register 變數。

規定移位表示式的型別為其左運算物件的型別。

允許建立指向過陣列末元素乙個位置的指標,以及對它的算術運算和關係運算。

(從c++)引進了包含引數型別的函式原型概念,引進了變長參數列函式的概念。仍允許老的形式,但僅僅是作為過時形式保留。

標準規定任何區域性宣告的作用域僅僅是當前的塊(復合語句)。

規定函式引數作為加入函式體(復合語句)的宣告,因此不能用變數宣告去覆蓋。

有關名字空間的規定:所有結構、聯合和列舉標記在乙個名字空間裡,標號是另乙個名字空間。

聯合變數在定義時也可以初始化,規定初始化其第乙個成分。

自動結構、聯合和陣列也可以初始化,但限制其初始化方式(其中只能包含常量表示式)。

帶大小描述的字元陣列也可以用大小與之相同的字串常量初始化(結束的 \0 被刪除)。

開關語句的控制表示式和case標號可以是任何整型的(包括字元型別)。

PHP 各個版本之間的區別

php更新的速度實在是太快了,在學習php之前,我查閱並了解了一下php各個版本之間的區別,分享在此處。php5.2 以前 autoload,pdo 和 mysqli,型別約束 php5.2 json 支援 php5.3 棄用的功能,匿名函式,新增魔術方法,命名空間,後期靜態繫結,heredoc 和...

spring cloud各個版本之間的區別

最近公司在使用spring cloud進行開發,對於spring cloud版本號一直有疑惑。那個版本在前?那個版本在後?那個版本是最新的?舉個瓜 2.0.3 release 2 主版本號,當功能模組有較大更新或者整體架構發生變化時,主版本號會更新 0 次版本號。次版本表示只是區域性的一些變動。2 ...

linux及其各個發行版本的介紹

linux及其各個發行版本的介紹 unix誕生於20世紀60年代末,windows誕生於20世紀80年代中期,linux誕生於20世紀90年代初。unix誕生的時間最早,後來的windows和linux都有借鑑與unix。可以說unix是作業系統的老大哥。linux是乙個類似unix的作業系統,li...