C–K&R C 與 ANSI C的區別

來源:互聯網
上載者:User

最近在看《C和指標》一書,書中多次提及K&R C,ANSI C我們倒是經常聽見,而這個不是很清楚,我特地去百度了一下,特做如下記錄.

C語言由Dennis M. Ritchie在1973年設計和實現。從那以後使用者逐漸增加。到1978年Ritchie和Bell實驗室的另一位程式專家Kernighan合寫了著名的《The C Programming Language》,將C語言推向全世界,許多國家都出了譯本,國內有一些C語言書就是這本書的翻譯或者編譯。由這本書定義的C語言後來被人們稱作 K&R C。
隨著C語言使用得越來越廣泛,出現了許多新問題,人們日益強烈地要求對C語言進行標準化。這個標準化的工作在美國國家標準局(ANSI)的架構中進行(1983-1988),最終結果是1988年10月頒布的ANSI標準X3.159-1989,也就是後來人們所說的ANSI C標準。由這個標準定義的C語言被稱作ANSI C。
ANSI C標準很快被採納為國際標準和各國的標準。國際標準為ISO/IEC 9899-1990,中國國家標準GB/T 15272-94是國際ISO標準的中文翻譯。
ANSI C標準化工作的一個主要目標是清除原來C語言中的不安全、不合理、不精確、不完善的東西。由此也產生了ANSI C與K&R C之間的差異。從總體上看,這些差異反應的是C語言走向完善、走向成熟。

ANSI C 對 K&R C 的修訂 (本段根據《C Programming Language》和C語言標準整理。不求完整,希望列出最常見的差異)
  • 對於源檔案內部的標識符,有效最小長度擴充到31個字元。檔案間串連時,標識符的最小有效長度仍然為6個字元。(許多實現都支援更大的長度)
  • 增加了幾個新關鍵字:void,const,volatile,signed,enum。拋棄了老關鍵字entry。
  • 在換意字元 \ 之後寫非規定的序列,其作用確定為無定義。
  • 規定8和9都不是八位元的合法字元。
  • 引進了數的尾碼字元:整數的U和L,浮點數的F和L。
  • 規定連續出現的字串常量將被拼接在一起。
  • 引進了“寬字元”的概念。
  • 將字元也確定為帶符號(signed)和不帶符號(unsigned)的。
  • 丟棄了long float(原來作為double的同義字)。
  • 引入了void類型,用 (void*) 表示通用指標的類型(過去人們通常用 (char*))。
  • 對算術類型規定了最小表示範圍。要求每個C語言系統用標頭檔(<limits.h>;和<float.h>;)說明實現中的具體規定。
  • 引進了枚舉定義enum。
  • 採用了來自C++的類型修飾符,如const。
  • 規定字串常量是不可修改的。
  • 改變了算術類型的隱含轉換規則。
  • 刪去了一些過時賦值運算子,如 =+。規定賦值運算子都是基本單詞,如 += 之間不能有空格分隔。
  • 引進了與一元 - 運算子對應的一元 + 運算子。
  • 指向函數的指標可以直接放在函數調用的位置,不必顯式地寫間接操作。
  • 允許結構地整體賦值,作為函數參數和傳回值傳遞。
  • 允許將取地址運算子作用於數組,得到的是指向有關數組的指標。
  • 標準規定 sizeof 運算子的傳回值為 size_t 類型(某個無符號整型),這一類型在標準標頭檔<stddef.h>;裡定義。同時在那裡定義的還有 ptrdiff_t 類型,它是指標減運算的結果類型。
  • 規定取地址運算子不能作用於 register 變數。
  • 規定移位運算式的類型為其左運算對象的類型。
  • 允許建立指向過數組末元素一個位置的指標,以及對它的算術運算和關係運算。
  • (從C++)引進了包含參數類型的函數原型概念,引進了變長參數表函數的概念。仍允許老的形式,但僅僅是作為過時形式保留。
  • 標準規定任何局部聲明的範圍僅僅是當前的塊(複合陳述式)。
  • 規定函數參數作為加入函數體(複合陳述式)的聲明,因此不能用變數聲明去覆蓋。
  • 有關名字空間的規定:所有結構、聯合和枚舉標記在一個名字空間裡,標號是另一個名字空間。
  • 聯合變數在定義時也可以初始化,規定初始化其第一個成分。
  • 自動結構、聯合和數組也可以初始化,但限制其初始化方式(其中只能包含常量運算式)。
  • 帶大小描述的字元數組也可以用大小與之相同的字串常量初始化(結束的 \0 被刪除)。
  • 開關語句的控製表達式和case標號可以是任何整型的(包括字元類型)。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.