C語言的三個標準
目前,有許多C實現(xiàn)可用。在理想情況下,編寫C程序時,假設(shè)該程序中未使用機器特定的編程技術(shù),那么它的運行情況在任何實現(xiàn)中都應(yīng)該相同。要在實踐中做到這一點,不同的實現(xiàn)要遵循同一個標準。C語言發(fā)展之初,并沒有所謂的C標準。1978年,布萊恩·柯林漢(BrianKernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language(《C語言程序設(shè)計》)第1版是公認的C標準,通常稱之為K&R C或經(jīng)典C。特別是,該書中的附錄中的“C語言參考手冊”已成為實現(xiàn)C的指導(dǎo)標準。例如,編譯器都聲稱提供完整的K&R實現(xiàn)。雖然這本書中的附錄定義了C語言,但卻沒有定義C庫。與大多數(shù)語言不同的是,C語言比其他語言更依賴庫,因此需要一個標準庫。實際上,由于缺乏官方標準,UNIX實現(xiàn)提供的庫已成為了標準庫。
1)第1個ANSI/ISO
C標準隨著C的不斷發(fā)展,越來越廣泛地應(yīng)用于更多系統(tǒng)中,C社區(qū)意識到需要一個更全面、更新穎、更嚴格的標準。鑒于此,美國國家標準協(xié)會(ANSI)于1983年組建了一個委員會(X3J11),開發(fā)了一套新標準,并于1989年正式公布。該標準(ANSI-C)定義了C語言和C標準庫。
國際標準化組織于1990年采用了這套C標準(ISO-C)。ISO-C和ANSI-C是完全相同的標準。ANSI/ISO標準的最終版本通常叫作C89(因為ANSI于1989年批準該標準)或C90(因為ISO于1990年批準該標準)。另外,由于ANSI先公布C標準,因此業(yè)界人士通常使用ANSI-C。在該委員會制定的指導(dǎo)原則中,最有趣的可能是:保持C的精神。委員會在表述這一精神時列出了以下幾點:
- 信任程序員;Trust the programmer.
- 不要妨礙程序員做需要做的事;Don't prevent the programmer from doing what needs to be done.
- 保持語言精練簡單;Keep the language small and simple.
- 只提供一種方法執(zhí)行一項操作;Provide only one way to do an operation.
- 讓程序運行更快,即使不能保證其可移植性。Make it fast, even if it is not guaranteed to be portable.
在最后一點上,標準委員會的用意是:作為實現(xiàn),應(yīng)該針對目標計算機來定義最合適的某特定操作,而不是強加一個抽象、統(tǒng)一的定義。在學習C語言過程中,許多方面都反映了這一哲學思想。
2)C99標準
1994年,ANSI/ISO聯(lián)合委員會(C9X委員會)開始修訂C標準,最終發(fā)布了C99標準。該委員會遵循了最初C90標準的原則,包括保持語言的精練簡單。委員會的用意不是在C語言中添加新特性,而是為了達到新的目標。
- 第1個目標是,支持國際化編程。例如,提供多種方法處理國際字符集。
- 第2個目標是,“調(diào)整現(xiàn)有實踐致力于解決明顯的缺陷”。因此,在遇到需要將C移至64位處理器時,委員會根據(jù)現(xiàn)實生活中處理問題的經(jīng)驗來添加標準。
- 第3個目標是,為適應(yīng)科學和工程項目中的關(guān)鍵數(shù)值計算,提高C的適應(yīng)性,讓C比FORTRAN更有競爭力。
這3點(國際化、彌補缺陷和提高計算的實用性)是主要的修訂目標。在其他方面的改變則更為保守,例如,盡量與C90、C++兼容,讓語言在概念上保持簡單。用委員會的話說:“……委員會很滿意讓C++成為大型、功能強大的語言”。C99的修訂保留了C語言的精髓,C仍是一門簡潔高效的語言。本書指出了許多C99修改的地方。雖然該標準已發(fā)布了很長時間,但并非所有的編譯器都完全實現(xiàn)C99的所有改動。因此,你可能發(fā)現(xiàn)C99的一些改動在自己的系統(tǒng)中不可用,或者只有改變編譯器的設(shè)置才可用。
3)C11標準
維護標準任重道遠。標準委員會在2007年承諾C標準的下一個版本是C1X,2011年終于發(fā)布了C11標準。此次,委員會提出了一些新的指導(dǎo)原則。出于對當前編程安全的擔憂,不那么強調(diào)“信任程序員”目標了。而且,供應(yīng)商并未像對C90那樣很好地接受和支持C99。這使得C99的一些特性成為C11的可選項。因為委員會認為,不應(yīng)要求服務(wù)小型機市場的供應(yīng)商支持其目標環(huán)境中用不到的特性。另外需要強調(diào)的是,修訂標準的原因不是因為原標準不能用,而是需要跟進新的技術(shù)。例如,新標準添加了可選項支持當前使用多處理器的計算機。






