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


 

參考:《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:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM