最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】C语言的各种版本:C89,AMD1,C99,C11

C crifan 16456浏览 0评论

【背景】

之前就知道了有个C90和C99。

后来又在:

【已解决】弄明白哪个版本的gcc才支持c11

期间知道有C11。

现在去整理一下,关于C语言的版本方面的更详细的内容。

 

参考内容:

Language Standards Supported by GCC

An Introduction to GCC – for the GNU compilers gcc and g++

 

C语言版本历史

C语言主要有三个版本:

ANSI C==C89==C90

ANSI C standard==X3.159-1989

1989年批准通过;

1990年发布;

后被批准为ISO标准:ISO/IEC 9899:1990

常叫做:C89

偶尔被叫做:C90

GCC中指定此版本所用参数时,有三种写法:

  • -ansi
  • -std=c90
  • -std=iso9899:1990

 

此C90后来在1994年,1996年,先后发布过对应的勘误表;

 

AMD1==C94==C95

1995年,针对之前1900年发布的标准,发布了一个修订版;

添加了一个有向图(digraphs)和宏:__STDC_VERSION__

此标准,常被叫做:AMD1

有时候被叫做:C94C95

GCC中指定此版本时所用参数:

  • -std=iso9899:199409

 

C99

1999年又发布了新标准:ISO/IEC 9899:1999

常被叫做:C99

此C99标准未完成之前的草案,被叫做:C9X

GCC中指定此版本时所用参数有两种写法:

  • -std=c99
  • -std=iso9899:1999

 

此C99后来在2001年,2004年和2007年,先后发布过对应的勘误表;

 

C11

2011年发布了新标准:ISO/IEC 9899:2011

GCC中指定此版本时所用参数有两种写法:

  • -std=c11
  • -std=iso9899:2011

此C11标准未完成之前的草案,被叫做:C1X

 

关于GCC中对于C的扩展

对于GCC来说,对于上述各个版本的C语言,都有一定的扩展(extension)

如果用上面列出来的那些-std参数的话,则会禁止,不使用这些扩展的。

如果想要在GCC中使用C扩展的话,所用的参数都是gnuXX类型的,分别是:

  • C90使用GCC的C扩展:-std=gnu90
  • C99使用GCC的C扩展:-std=gnu99
  • C11使用GCC的C扩展:-std=gnu11

 

当前C language dialect默认所用的参数是:-std=gnu90

但是当以后,GCC对于C99和C11支持程度真正完善后,则可能会换成对应的:-std=gnu99或-std=gnu11

 

C语言库函数实现类型

ISO的C语言标准,定义了对于C语言的两种实现:

  • 支持C语言的所有库函数
  • 支持C语言的基本库函数( + 各自版本对应的实现)
    • 基本库函数包括:<float.h>,<limits.h>,<stdarg.h>,<stddef.h>
    • AMD1对应的是:<iso646.h>
    • C99对应的是:<stdbool.h>,<stdint.h>
    • C11对应的是:<stdalign.h>,<stdnoreturn.h>

 

总结C语言的各种版本

 

summary c all versions

 

 

C语言的各种版本

主版本

C89

AMD1

C99

C11

别名

C90

ANSI C

X3.159-1989

ISO/IEC 9899:1990

C94

C95

ISO/IEC 9899:1999

ISO/IEC 9899:2011

标准通过时间

1989年

   

标准发布时间

1990年

1995年

1999年

2011年

GCC使用此版本所用参数

-ansi

-std=c90

-std=iso9899:1990

-std=iso9899:199409

-std=c99

-std=iso9899:1999

-std=c11

-std=iso9899:2011

GCC使用此版本且带C扩展时所用参数

-std=gnu90

 

-std=gnu99

-std=gnu11

C语言实现时所对应函数库

<float.h>

<limits.h>

<stdarg.h>

<stddef.h>

<iso646.h>

<stdbool.h>

<stdint.h>

<stdalign.h>

<stdnoreturn.h>

 

如此,就很清晰明了了。

转载请注明:在路上 » 【整理】C语言的各种版本:C89,AMD1,C99,C11

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.195 seconds, using 22.06MB memory