gcc支持的语言及标准

阅读数:248 评论数: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

 




相关推荐

一、概述 GCC一般包括预处理、编译、组装和链接。GCC的运行一般是调用命令gcc,在cross-compiling时使用machine-gcc或machine-gcc-version,在使用c++时

一、概述 1、作用 __attribute__ 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

编译器中的sanitize来自于google的开源sanitizers项目,后GNU将该工具加入到GCC编译中,是查找隐藏Bug的利器。 -fsanitize=address</p

一、基本的asm 格式: asm asm-qualifiers ( AssemblerInstructions) (1)asm关键字是GNU的扩展,当编译配置项为-ansi或-std配置项时,使用__

内建函数就是编译器内部实现的函数,它们随时跟着gcc升级而变化,所以不推荐普遍的使用。使用内建函数更高效,因为它们大多以inline方式编译或者针对特定平台进行优化。 C标准库中的

在1999年的ISO C标准中,一个函数可以接收变参数,而宏定义中也可以接收变参数,例如: #define debug(for

强弱符号的链接规则 链接器会按照如下规则处理与选择被多次定义的全局符号 (1)不允许强符号被多次定义,如果有多个强符号定义,则链

一、概述 1、prolog与epilog prolog翻译过来是“序言;开端”。 epilog翻译过来是”后记;结语“。 prolog与epilog其实就是两段固定的代码,当编译器对程序进行编译的时候

在C语言编程过程中,我们常常会实现一些可变参数的函数调用(类scanf、printf函数),变参函数在我们编程过程中带来了很大的方便,但是也有一些问题,即我们在调用可变参数的函数的时候,默认情况

GCC:GNU(Gnu's Not Unix)编译器套装(GNU Compiler Collection,GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件