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添加关键字
intsigned_Bool
longvoid_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:

 

转载于:https://www.cnblogs.com/fortunely/p/9490979.html

ISO C90和ISO C99是国际标准化组织(ISO)分别于1990年和1999年发布的C语言标准,这两个版本的C语言标准在多个方面有所不同。以下是一些关键的区别: 1. 标准化的语言特性: - ISO C90对应于ANSI C,是C语言的第一个广泛认可的标准。这个版本的C语言因其稳定性和广泛实现而被广泛使用。 - ISO C99对C语言进行了显著扩展,包括了新的语法特性和库函数,旨在提高C语言的表达能力和效率,以及更好的支持大型程序。 2. 语言特性改进: - ISO C99引入了布尔类型(`_Bool`),允许进行布尔运算。 - C99支持可变长度数组(VLA),即数组的大小可以在运行时确定。 - 新增了复数和虚数类型支持,以及相关的库函数。 - 提供了更好的整数类型支持,包括`long long int`类型。 - 引入了复合字面量和指定初始化器。 3. 语言库的扩展和改进: - C99为数学库引入了许多新的函数。 - 标准库中增加了对宽字符和多字节字符的支持,提供了更多的国际化功能。 - 引入了对通用的非整数类型的复数和虚数的数学函数库。 4. 编译器支持: - ISO C90是早期C编译器标准,它要求编译器实现基本的语言特性。 - ISO C99由于引入了较多的新特性,对编译器的要求更高,因此C99编译器支持可能不如C90广泛,尤其是在一些老旧的系统上。 5. 语言一致性: - C99标准鼓励了更多的编译器一致性检查,比如类型兼容性和标准库函数调用。 6. 对原有代码的影响: - ISO C90是向后兼容的,即所有C99编写的程序都应该能在C90编译器上编译通过,但反之则不然。因为C99中的一些新特性在C90标准中是不被支持的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值