gcc支持的语言及标准
阅读数:411 评论数:0
跳转到新版页面分类
C/C++
正文
文档对应gcc版本8.4
GCC原来表示GNU C Compiler,现在一脙GNU Compiler Collection。支持C、C++、Objective-C,Objective-C++,Fortran,Ada,Go和BRIG(HSAIL)。
GCC中和语言无关的部分包括大部分的optimizers和生成机器码的“back end”,和语言有关的部分称为“front end”。
除了C的编译器外,其他语言的编译器都有自己的名称,例如,C++的编译器称为G++,Ada的编译器称为GNAT。
C语言
最初始的ANSI C标准(X3.159-1989)起草于1989年,发布于1990年,并被ISO收录为ISO/IEC 9899:1990。GCC选择C语言标准时,可以使用“-ansi”、“-std=c90”或者“-std=iso9899:1990”。为了使用标准的所有语法检查,可以指“-pedantic”或“-pedantic-errors”。
接接gcc支持的标准是“-std=iso9899:199409”、“-std=c99”/"-std=iso9899:1999"、“-std=c11”/"-std=iso9899:2011"、“-std=c17”/"-std=iso9899:2017"。但是可以认为c11和c17是没有区别的。
默认情部况下,GCC支持C语言的扩展,可以使用“-std”明确禁止这种扩展,也可以明确指定使用哪种扩展,如“-std=gnu90”(C90的扩展),“-std=gnu99”(c99的扩展),“-std=gnu11”(c11的扩展)
如果不指定语言标准,默认使用“-std=gnu11”。
ISO C标准定义的类有两种的实现方式,一种由标准库实现所有标准(称为hosted implementation),另一种是只实现了部分标准的库文件的方式(称为freestanding implementation)。
标准也定义了两种编程方式,一种称为freestanding environment,需要自己实现程序启动和关闭,并且不使用标准库,比如操作的内核。另一种称为hosted enviroment,使用标准库,并且启动函数 为int main (void)或者int main(int,char*[]),比如运行在操作系统上应用程序。
默认情况下,GCC是一个hosted implementation compiler,此时__STDC_HOSTED__值是1,并且假设使用的ISO C标准的函数名称是在标准库中定义过的。使用“-ffreestanding”时,GCC变成一个freestanding implementation compiler,此时__STDC_HOSTED__值是0,并且不假设函数名来自标准库。
GCC不提供hosted implementation要求的所有库文件,也不提供C99 freestanding implementation在所有平台上需求的库文件,需要自行从其他引用,如GNU C library。
C++
GCC支持的ISO C++标准有ISO/IEC 14882:1993, ISO/IEC 14882:2003,可以使用“-ansi”、"-std=c++98"、"-std=c++03",后面有C++11(-std=c++11),c++14(-std=c++14),c++17(-std=c++17)。
默认gcc是提供c++语言扩展的,默认是-std=gnu++14。
另外的object-c、object-c++、Go等 语言不再描述,可以参考文档https://gcc.gnu.org/onlinedocs/gcc-8.4.0/gcc.pdf