參考:《C Primer Plus》,Stephen Prata著,姜佑譯。
ANSI/ISO C標准
美國ANSI成立委員會X3J11,於89/90年,99年,11年,發布C標准:C89/C90,C99,C11。
| C標准 | 描述 |
| 經典C | 也稱K&R C,87年K&R著作《C語言程序設計》,成為C指導標准 |
| C89/C90 | 89年ANSI C,90年ISO C,定義了C語言和C標准庫。X3J11開發,同一套標准,發布名稱/機構不同。 用意:作為實現,應該針對目標計算機定義適合特定操作,而不是強加一個抽象、統一的定義。 特點: 1.信任程序員; 2.不妨礙程序員做任何事; 3.語言簡單精煉; 4.只提供一種方法執行一項操作; 5.不為程序可移植性犧牲效率。 |
| C99 | C9X委員會修訂,遵循C90原則。 新特性: 1.支持國際化編程; 2.調整現有實踐致力於解決明顯的缺陷; 3.為適應科學和工程項目中關鍵數值計算,提高C適應性; |
| C11 | 特點: 1.不強調信任程序員; 2.不要求服務小型機市場供應商支持目標環境用不到的特性; |
C語言標准眾多,要如何判斷編譯器所支持的標准版本?
一個簡單的方法是,依據不同版本標准所支持的數據類型關鍵字來判別,如下表所示:
| K&R給出的關鍵字(87 經典C) | C90添加關鍵字 | C99添加關鍵字 |
| int | signed | _Bool |
| long | void | _Complex |
| short | _Imaginary | |
| unsigned | ||
| char | ||
| float | ||
| double |
那么,可以在C程序中,定義相應類型,然后build是否支持來判斷。
下面在Ubuntu OS下以為例,進行測試。
GCC版本=4.8.4

測試代碼:
//C99.c #include <stdio.h> #include <stdint.h> int main(void) { // C90 signed int a = -10; printf("a=%d\n", a); // C99 _Bool b = 1; if (b) { printf("b is true.\n"); } else{ printf("b is false\n"); } return 0; }
運行結果表明編譯器支持C99:

