1. 程式人生 > >C 如何判斷編譯器是否支持C90 C99?

C 如何判斷編譯器是否支持C90 C99?

c語言程序 市場 ubun bool 數值 gcc 缺陷 rim 類型

參考:《C Primer Plus》,Stephen Prata著,姜佑譯。

ANSI/ISO C標準

美國ANSI成立委員會X3J11,於89/90年,99年,11年,發布C標準:C89/C90,C99,C11。

ANSI/ISO 各版本C標準
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語言標準眾多,要如何判斷編譯器所支持的標準版本?

一個簡單的方法是,依據不同版本標準所支持的數據類型關鍵字來判別,如下表所示:

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?