C 如何判斷編譯器是否支持C90 C99?
阿新 • • 發佈:2018-08-17
c語言程序 市場 ubun bool 數值 gcc 缺陷 rim 類型
參考:《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:
C 如何判斷編譯器是否支持C90 C99?