C語言的三套標準--C90 C99 C11和C語言中布爾類型實現說明

C語言三套標準說明

C90 標準
由於C語言被各大公司所使用(包括當時處於鼎盛時期的 IBM PC),因此到了 1989 年,C語言由美國國家標準協會(ANSI)進行了標準化,此時C語言又被稱爲 ANSI C。而僅過一年,ANSI C 就被國際標準化組織 ISO 給採納了。此時,C語言在 ISO 中有了一個官方名稱——ISO/IEC 9899: 1990。其中:
a、 9899 是C語言在 ISO 標準中的代號,像 C++ 在 ISO 標準中的代號是 14882;
b、而冒號後面的 1990 表示當前修訂好的版本是在 1990 年發佈的。

    對 於ISO/IEC 9899: 1990 的俗稱或簡稱,<font color="red">有些地方稱爲 C89,有些地方稱爲 C90,或者 C89/90</font>。不管怎麼稱呼,它們都指代這個最初的C語言國際標準。這個版本的C語言標準作爲 K&R C 的一個超集(即 K&R C 是此標準C的一個子集),把後來引入的許多非官方特性也一起整合了進去。其中包括了從 C++ 借鑑的函數原型(Function Prototypes),指向 void 的指針,對國際字符集以及本地語言環境的支持。在此標準中,儘管已經將函數定義的方式改爲現在我們常用的那種方式,不過K&R的語法形式仍然兼容。

C99標準
在隨後的幾年裏,C語言的標準化委員會又不斷地對C語言進行改進,到了 1999 年,正式發佈了 ISO/IEC 9899: 1999,簡稱爲 C99 標準。C99 標準引入了許多特性,包括內聯函數(inline functions)、可變長度的數組、靈活的數組成員(用於結構體)、複合字面量、指定成員的初始化器、對IEEE754浮點數的改進、支持不定參數個數的宏定義,在數據類型上還增加了 long long int 以及複數類型。毫不誇張地說,即便到目前爲止,很少有C語言編譯器是完整支持 C99 的。像主流的 GCC 以及 Clang 編譯器都能支持高達90%以上,而微軟的 Visual Studio 2015 中的C編譯器只能支持到 70% 左右。

C11標準
2007 年,C語言標準委員會又重新開始修訂C語言,到了 2011 年正式發佈了 ISO/IEC 9899: 2011,簡稱爲 C11 標準。C11標準新引入的特徵儘管沒 C99 相對 C90 引入的那麼多,但是這些也都十分有用,比如:字節對齊說明符、泛型機制(generic selection)、對多線程的支持、靜態斷言、原子操作以及對 Unicode 的支持。

查看當前編譯器使用的標準

代碼實現

#include<stdio.h>
int main()
{
#if (!defined(__STDC__))
	printf("非標準C!");
#elif defined(__STDC_VERSION__)
	printf("標準C版本:%ld。", __STDC_VERSION__);
#else
	printf("舊的標準C。");
#endif
	getchar();
	return 0;
}

特別說明:布爾類型的實現模式

因本地程序有使用boolean變量,但是本地C99標準並沒有boolean變量,boolean類型是在C11中才有的。
C99沒有引入boolean類型,我們可以通過如下思路來實現boolean的實現:
1、自定義實現
使用宏定義實現

typedef int BOOL ;
#define true 0
#define false 1

2、通過枚舉實現

typedef enum { true=0, false} BOOL;

3、編程使用魔鬼數字 約束定義
例如:我們定義

int  bool_true = 1;
int bool_false = 0;
//。。。程序在其它部分引用即可

待補充:C語言三套標準,在使用中的差別

因爲這個跟當前特性有關,可以在編程的過程中,再具體查看。所以這個模塊可以先定義爲待補充就好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章