GCC -std编译标准一览表

C语言版本

要知道,任何一门编程语言都有相关的组织和团体在不停的维护和更新。原因很简单,时代在发展,编程语言如果停滞不前,最终就会被淘汰。

C 语言 为例,发展至今该编程语言已经迭代了诸多个版本,例如 C89(偶尔又称为 C90)、C94(C89 的修订版)、C99、C11、C17,以及当下正在开发的 C2X 新标准。甚至于在这些标准的基础上,GCC 编译器本身还对 C 语言的语法进行了扩展,先后产生了 GNU90、GNU99、GNU11 以及 GNU17 这 4 个版本。

有趣的是,GCC 编译器对 C 语言的很多扩展,往往会被 C 语言标准委员会所采纳,并添加到新的 C 语言标准中。例如,GNU90 中对 C 语言的一些扩展,就融入到了新的 C99 标准中;GNU90、GNU99 中对 C 语言的一些扩展,被融入到了新的 C11 标准中。

C++版本

C++ 语言的发展也历经了很多个版本,包括 C98、C03(C98 的修订版)、C11(有时又称为 C0x)、C14、C17,以及即将要发布的 C20 新标准。

和 C 语言类似,GCC 编译器本身也对不同的 C++ 标准做了相应的扩展,比如 GNU98、GNU11、GNU14、GNU17。

读者可能会问,这么多标准,GCC 编译器使用的到底是哪一套呢?不同版本的 GCC 编译器,默认使用的标准版本也不尽相同。

以当前最新的 GCC 10.1.0 版本为例,默认情况下 GCC 编译器会以 GNU11 标准(C11 标准的扩展版)编译 C 语言程序,以 GNU14 标准(C14 标准的扩展版)编译 C++ 程序。

std选项

那么,我们可以手动控制 GCC 编译器使用哪个编译标准吗?答案是肯定的,对于编译 C、C++ 程序来说,借助 -std 选项即可手动控制 GCC 编译程序时所使用的编译标准。

也就是说,当使用 gcc 指令编译 C 语言程序时,我们可以借助 -std 选项指定要使用的编译标准;同样,当使用 g++ 指令编译 C++ 程序时,也可以借助 -std 选项指定要使用的编译标准。

-std 选项的使用方式很简单,其基本格式如下:

gcc/g++ -std=编译标准

注意,不同版本的 GCC 编译器,所支持使用的 C/C++ 编译标准也是不同的。下图罗列了常用的 GCC 版本对 C 语言编译标准的支持程度。

01_GCC std选项.png

注意,表头表示的是各个编译标准的名称,而表格内部的则为 -std 可用的值,例如 -std=c89、-std=c11、-std=gnu90 等(下表也是如此)。下表罗列了常用的 GCC 版本对 C++ 程序编译标准的支持程度。

GCC文件扩展名