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)。