ANSI C, Standard C与GCC

我们常在书本、网页中看到ANSI C的字眼,它到底指什么意思呢?

ANSI C严格来说,应当是指美国国家标准学会(ANSI)对C语言发布的标准。但实际上,ANSI只在1989年发布过C语言的标准,后面的C语言标准都是由国际标准化委员会(ISO)和国际电工委员会(IEC)审定和发布。

既然ANSI只在1989年发布过C语言的标准,那为什么现在还经常使用ANSI C呢,难道我们还在使用C89标准吗?不是的,我们今天使用的是由ISO/IEC发布的C11标准。但由于ANSI C是第一个C标准,并有巨大影响,所以ANSI C这个名字仍被广泛使用。可以说,ANSI C就是Standard C。

GCC支持C90,不完全支持C99。在不指定C标准的情况下,GCC默认使用GNU C。GNU C = C90 + GNU Extensions = C90 + (some features in C99 + some features in C11)。默认情况下,GCC使用-std=gnu90。如果按照C99或C11标准编写C语言程序的话,GCC编译时需要添加编译器选项-std=gnu99或-std=gnu11

例如使用 for(int i = 0; i < 10; i++) ... 这样的语句,只有加上编译器选项-std=gnu99,gcc才能编译通过。

相关内容:

ANSI 是美国国家标准学会(American National Standards Institute)的缩写,它由公司、政府和其他成员组成的自愿组织,它们协商与标准有关的活动,审议美国国家标准,并努力提高美国在国际标准化组织中的地位,是国际标准化委员会(ISO)和和国际电工委员会(IEC)常任理事成员之一。

1983年,ANSI根据C语言问世以来各种版本对C的发展和扩充,制定了C 的第一个标准,并于1989年发布。这个标准被称为C89标准,也称作ANSI C。1990年ISO和IEC采用了ANSI C(带有一些小改动)为国际标准,所以C89标准又被称为C90标准。后来,ISO和IEC在1995年发布了C95标准,1999年发布了C99标准,2011年发布了C11标准。

GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言。

推荐阅读更多精彩内容