天天看點

C語言标準——C89、C99、C11、C17、C2x ...

C語言标準——C89、C99、C11、C17、C2x ...

C的标準化過程

C語言自誕生到現在,期間經曆了多次标準化過程,主要分成以下幾個階段:

Traditional C

此時的 C 語言還沒有标準化,來自“C Programming Language, First Edition, by Brian W. Kernighan, Dennis M. Ritchie. Prentice Hall PTR 1978”的 C 描述可算作“正式”的标準,是以此時的 C 也稱為“K&R” C。

期間 C 語言一直不斷的發生細微的變化,各編譯器廠商也有自己的擴充,這個過程一直持續到20世紀80年代末。

C89

考慮到标準化的重要,ANSI(American National Standards Institute)制定了第一個 C 标準,在1989年被正式采用(American National Standard X3.159-1989),故稱為 C89,也稱為 ANSI C。

該标準随後被 ISO 采納,成為國際标準(ISO/IEC 9899:1990)。

C89 的主要改動:

  • 定義了 C 标準庫;
  • 新的預處理指令和特性;
  • 函數原型(prototype);
  • 新關鍵字:const、volatile、signed;
  • 寬字元、寬字元串和多位元組字元;
  • 轉化規則、聲明(declaration)、類型檢查的改變。

C95

這是對 C89 的一個修訂和擴充,稱為“C89 with Amendment 1”或 C95,嚴格說來并不是一個真正的标準。

C95 的主要改動:

  • 3個新标準頭檔案:iso646.h、wctype.h、wchar.h;
  • 一些新的标記(token)和宏(macro);
  • 一些新的 printf/scanf 系列函數的格式符;
  • 增加了大量的寬字元和多位元組字元函數、常數和類型。

C99

1999年,在做了一些必要的修正和完善後,ISO 釋出了新的 C 語言标準,命名為 ISO/IEC 9899:1999,簡稱“C99”。

C99 的主要改動:

  • 複數(complex);
  • 整數(integer)類型擴充;
  • 變長數組;
  • Boolean 類型;
  • 非英語字元集的更好支援;
  • 浮點類型的更好支援;
  • 提供全部類型的數學函數;
  • C++ 風格注釋(​

    ​//​

    ​)。

C11

2007 年,C語言标準委員會又重新開始修訂C語言,到了 2011 年正式釋出了 ISO/IEC 9899:2011,簡稱為 C11 标準。

C11 标準新引入的特征盡管沒 C99 相對 C90 引入的那麼多,但是這些也都十分有用,比如:位元組對齊說明符、泛型機制(generic selection)、對多線程的支援、靜态斷言、原子操作以及對 Unicode 的支援。

C17

C17(也被稱為為 C18)是于2018年6月釋出的 ISO/IEC 9899:2018 的非正式名稱,也是目前(截止到2020年6月)為止最新的 C語言程式設計标準,被用來替代 C11 标準。

C17 沒有引入新的語言特性,隻對 C11 進行了補充和修正。

C2x

下一個版本的 C 标準,預計将于2022年12月1日完成。

有許多人提出想為 C 語言添加面向對象的特性,包括增加類、繼承、多态等已被 C++ 語言所廣泛使用的文法特性,但是最終被委員會駁回了。因為這些複雜的文法特性并不符合 C 語言的設計理念以及設計哲學,況且 C++ 已經有了這些特性,C 語言無需再對它們進行支援。

關于C語言曆史與演化程序的詳細介紹可參考維基百科:

​​​https://en.wikipedia.org/wiki/C_(programming_language)​​。

繼續閱讀