C語言歷史與演化—C89、C99、C11、C17、C2x
C語言作為一門古老而受歡迎的編程語言,經(jīng)歷了多個(gè)版本的演進(jìn)和標(biāo)準(zhǔn)化,本文將深入解析C語言的四套標(biāo)準(zhǔn),即C89、C99、C11和C17,通過具體實(shí)例說明每個(gè)標(biāo)準(zhǔn)引入的新特性和改進(jìn)。
Traditional C
此時(shí)的 C 語言還沒有標(biāo)準(zhǔn)化,來自“C Programming Language, First Edition, by Brian W. Kernighan, Dennis M. Ritchie. Prentice Hall PTR 1978”的 C 描述可算作“正式”的標(biāo)準(zhǔn),所以此時(shí)的 C 也稱為“K&R” C。
期間 C 語言一直不斷的發(fā)生細(xì)微的變化,各編譯器廠商也有自己的擴(kuò)展,這個(gè)過程一直持續(xù)到20世紀(jì)80年代末。
C89(C90)
C89(也稱為C90)是C語言的最早版本的標(biāo)準(zhǔn),于1989年發(fā)布。它定義了C語言的基本語法、關(guān)鍵字和數(shù)據(jù)類型,并引入了標(biāo)準(zhǔn)庫函數(shù),如stdio.h和stdlib.h等。C89的特點(diǎn)是簡潔、可移植且易于理解,被廣泛應(yīng)用于各種計(jì)算機(jī)平臺(tái)。
C89 的主要改動(dòng):
- 定義了 C 標(biāo)準(zhǔn)庫;
- 新的預(yù)處理命令和特性;
- 函數(shù)原型(prototype);
- 新關(guān)鍵字:const、volatile、signed;
- 寬字符、寬字符串和多字節(jié)字符;
- 轉(zhuǎn)化規(guī)則、聲明(declaration)、類型檢查的改變。
舉例來說,下面的代碼展示了使用C89標(biāo)準(zhǔn)編寫的程序示例:
#include <stdio.h> int main() { printf("Hello, C89!\n"); return 0; }
在這個(gè)示例中,我們使用了C89標(biāo)準(zhǔn)的頭文件 <stdio.h> 和函數(shù) printf 來輸出一條信息。
C95
這是對(duì) C89 的一個(gè)修訂和擴(kuò)充,稱為“C89 with Amendment 1”或 C95,嚴(yán)格說來并不是一個(gè)真正的標(biāo)準(zhǔn)。
C95 的主要改動(dòng):
- 3個(gè)新標(biāo)準(zhǔn)頭文件:iso646.h、wctype.h、wchar.h;
- 一些新的標(biāo)記(token)和宏(macro);
- 一些新的 printf/scanf 系列函數(shù)的格式符;
- 增加了大量的寬字符和多字節(jié)字符函數(shù)、常數(shù)和類型。
C99
C99標(biāo)準(zhǔn)于1999年發(fā)布,對(duì)C語言進(jìn)行了擴(kuò)展和改進(jìn)。它引入了一些新特性,如變長數(shù)組、復(fù)合字面量、單行注釋等。C99還提供了更靈活的變量聲明和初始化方式,允許在代碼中聲明變量的同時(shí)進(jìn)行初始化。
C99 的主要改動(dòng):
- 復(fù)數(shù)(complex);
- 整數(shù)(integer)類型擴(kuò)展;
- 變長數(shù)組;
- Boolean 類型;
- 非英語字符集的更好支持;
- 浮點(diǎn)類型的更好支持;
- 提供全部類型的數(shù)學(xué)函數(shù);
- C++ 風(fēng)格注釋(
//
)。
舉例來說,下面的代碼展示了使用C99標(biāo)準(zhǔn)引入的變長數(shù)組和復(fù)合字面量的示例:
#include <stdio.h> int main() { int n = 5; int arr[n]; // 變長數(shù)組 for (int i = 0; i < n; i++) { arr[i] = i + 1; } printf("Array: { "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("}\n"); return 0; }
在這個(gè)示例中,我們使用了C99標(biāo)準(zhǔn)引入的變長數(shù)組來定義數(shù)組 arr,其大小由變量 n 決定。同時(shí),我們使用了復(fù)合字面量來在一行代碼中初始化數(shù)組的元素。
C11
C11標(biāo)準(zhǔn)于2011年發(fā)布,是對(duì)C語言的又一次改進(jìn)和擴(kuò)展。它引入了一些新特性,如匿名結(jié)構(gòu)體、泛型選擇表達(dá)式、多線程支持等。C11還對(duì)一些現(xiàn)有特性進(jìn)行了細(xì)微的改進(jìn)和修正,提高了語言的表達(dá)能力和可靠性。
舉例來說,下面的代碼展示了使用C11標(biāo)準(zhǔn)引入的匿名結(jié)構(gòu)體和泛型選擇表達(dá)式的示例:
#include <stdio.h> int main() { struct { int x; int y; } point = { .x = 5, .y = 10 }; // 匿名結(jié)構(gòu)體 _Generic(point, struct { int x; int y; }: printf("Point: (%d, %d)\n", point.x, point.y), default: printf("Invalid data type!\n")); // 泛型選擇表達(dá)式 return 0; }
在這個(gè)示例中,我們使用了C11標(biāo)準(zhǔn)引入的匿名結(jié)構(gòu)體來定義結(jié)構(gòu)體變量 point,并使用了泛型選擇表達(dá)式 _Generic 來根據(jù)變量的類型選擇不同的操作。
C17
C17(也被稱為為 C18)是于2018年6月發(fā)布的 ISO/IEC 9899:2018 的非正式名稱,也是目前(截止到2020年6月)為止最新的 C語言編程標(biāo)準(zhǔn),被用來替代 C11 標(biāo)準(zhǔn)。
C17 沒有引入新的語言特性,只對(duì) C11 進(jìn)行了補(bǔ)充和修正。
C2x
下一個(gè)版本的 C 標(biāo)準(zhǔn),預(yù)計(jì)將于2022年12月1日完成。
有許多人提出想為 C 語言添加面向?qū)ο蟮奶匦裕ㄔ黾宇?、繼承、多態(tài)等已被 C++ 語言所廣泛使用的語法特性,但是最終被委員會(huì)駁回了。因?yàn)檫@些復(fù)雜的語法特性并不符合 C 語言的設(shè)計(jì)理念以及設(shè)計(jì)哲學(xué),況且 C++ 已經(jīng)有了這些特性,C 語言無需再對(duì)它們進(jìn)行支持。
總結(jié)
C語言的四套標(biāo)準(zhǔn)(C89、C99、C11和C17)代表了C語言的演進(jìn)和改進(jìn)過程。每個(gè)標(biāo)準(zhǔn)引入了新特性和改進(jìn),為程序員提供了更強(qiáng)大和靈活的編程工具。通過具體實(shí)例的說明,我們深入探討了每個(gè)標(biāo)準(zhǔn)的特點(diǎn)和新特性,幫助你了解C語言的不同版本,并為你在實(shí)際編程中選擇合適的標(biāo)準(zhǔn)提供了指導(dǎo)。
到此這篇關(guān)于C語言歷史與演化—C89、C99、C11、C17、C2x的文章就介紹到這了,更多相關(guān)C89、C99、C11、C17、C2x內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言算法的時(shí)間復(fù)雜度和空間復(fù)雜度
這篇文章主要介紹了C語言算法的時(shí)間復(fù)雜度和空間復(fù)雜度,算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源,更多相關(guān)需要的朋友可以參考一下2022-07-07C++指針和數(shù)組:字符和字符串、字符數(shù)組的關(guān)聯(lián)和區(qū)別
字符串是一種重要的數(shù)據(jù)類型,但是c語言并沒有顯示的字符串?dāng)?shù)據(jù)類型,因?yàn)樽址宰址A康男问匠霈F(xiàn)或者存儲(chǔ)于字符數(shù)組中。在C++標(biāo)準(zhǔn)模板庫(STL)中提供了string類,實(shí)現(xiàn)了對(duì)字符串的封裝。2022-12-12C語言實(shí)現(xiàn)兩個(gè)遞減數(shù)列中尋找某一個(gè)數(shù)
這篇文章主要介紹了C語言實(shí)現(xiàn)兩個(gè)遞減數(shù)列中尋找某一個(gè)數(shù),是一類經(jīng)典的數(shù)組操作算法,需要的朋友可以參考下2014-09-09C++ Boost Lockfree超詳細(xì)講解使用方法
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11