码迷,mamicode.com
首页 > 其他好文 > 详细

C 如何判断编译器是否支持C90 C99?

时间:2018-08-17 01:23:51      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:目标   print   支持   span   double   市场   如何   border   c语言   

 

参考:《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?

标签:目标   print   支持   span   double   市场   如何   border   c语言   

原文地址:https://www.cnblogs.com/fortunely/p/9490979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!