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

Wesley13
• 阅读 1269

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

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

测试代码: 

//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?

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
3年前
C语言入门系列之1.C语言概述和上机运行简单C程序
一、C语言的发展过程C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言,同时由B.W.Kernighan和D.M.Ritchit合著了著名的《THECPROGRAMMINGLANGUAGE》一书,通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的C语言标
Wesley13 Wesley13
3年前
GCC编译 C与C++ C89与C99
1)最初的ANSIC标准(X3.1591989)在1989年被批准,并于1990年发布。稍后这个标准被接受为ISO标准(ISO/IEC9899:1990)。虽然ISO标准将ANSI标准的某些章节重新编号并变为条款,但是两者实际上并无区别。不论是ANSI标准还是ISO标准,通常都称之为C89,偶尔也因为发布日
Stella981 Stella981
3年前
ANSI C、ISO C、Standard C联系与区别
做C语言开发的人,经常会遇到“ANSIC”、“ISOC”与“StandardC”三种术语,经常会让人傻傻分不清楚。博主之前按也是搞不清三者的关系,于是某天下定决心,一定要搞清楚三者的关系,先百度上搜下。下面是在百度百科上搜索关键字“ANSIC”得到的结果:\分割线
Wesley13 Wesley13
3年前
C++标准库和标准模板库
<divid"article\_content"class"article\_contentclearfixcsdntrackingstatistics"datapid"blog"datamod"popu\_307"datadsm"post"<linkrel"stylesheet"href"https://csd
Wesley13 Wesley13
3年前
C语言自学《一》
初步了解C语言C语言C语言是一种功能强大、简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务等等C语言标准C语言由一个国际标准定义,目前最新的标准为C11,由于C11标准定义的一些语言元素是可选的,所以有些编译器并没有实现该标准的全部功能,C11标准英文说明文档
Wesley13 Wesley13
3年前
C 标准库
strcatAppendsacopyofthesourcestringtothedestinationstring.Theterminatingnullcharacterindestinationisoverwrittenbythefirstcharacterofsource,a
Wesley13 Wesley13
3年前
C89和C99标准比较
1、增加restrict指针C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。如果某个函数定义了两个restrict指针变
Wesley13 Wesley13
3年前
C++11新特性学习
1、什么是C11C11标准为C编程语言的第三个官方标准,正式名叫ISO/IEC14882:2011InformationtechnologyProgramminglanguagesC。在正式标准发布前,原名C0x。它将取代C标准第二版ISO/IEC14882:2003Progr
Wesley13 Wesley13
3年前
GNU C 与 ANSI C的区别
1.零长度数组GNUC允许使用零长度数组,定义变长度对象时比较方便structvar\_data{   intlen;   chardata\0\;};var\_data的大小仅为一个int型,data是常量地址,data\index\是访问其后的内存空间。structvar\_data\smal
老知识复盘-SQL从提交到执行到底经历了什么 | 京东云技术团队
sql(StructuredQueryLanguage:结构化查询语言)是高级的费过程化编程语言,允许用户在高层数据结构上工作,是一种数据查询和程序设计语言,也是(ANSI)的一项标准的计算机语言.but…目前仍然存在着许多不同版本的sql语言,为了与ANSI标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如SELECT、UPDATE、DELETE、INSERT、WHERE等等).