概述
 
         任何一门编程语言都有相关的组织和团体在不停的维护和更新。原因很简单,时代在发展,编程语言如果停滞不前,最终就会被淘汰。  
 
 
         以 C  
 语言为例,发展至今该编程语言已经迭代了诸多个版本,例如  
 C89 
 (偶尔又称为C90)、 
 C94 
 ( 
 C89  
 的修订版)、 
 C99 
 、 
 C11 
 、 
 C17 
 ,以及当下正在开发的  
 C2X  
 新标准。甚至于在这些标准的基础上,GCC 编译器本身还对 C  
 语言的语法进行了扩展,先后产生了 GNU90、 
 GNU99 
 、 
 GNU11  
 以及  
 GNU17  
 这  
 4  
 个版本。 以 C  
 语言为例,发展至今该编程语言已经迭代了诸多个版本,例如  
 C89 
 (偶尔又称为 C90)、 
 C94 
 ( 
 C89  
 的修订版)、 
 C99 
 、 
 C11 
 、 
 C17 
 ,以及当下正在开发的  
 C2X  
 新标准。甚至于在这些标准的基础上,GCC 编译器本身还对 C  
 语言的语法进行了扩展,先后产生了 GNU90、 
 GNU99 
 、 
 GNU11  
 以及  
 GNU17  
 这  
 4  
 个版本。  
 
 
         读者可能会问,这么多标准,GCC  
 编译器使用的到底是哪一套呢?不同版本的  
 GCC  
 编译器,默认使用的标准版本也不尽相同。以当前最新的 GCC 10.1.0  
 版本为例,默认情况下GCC 编译器会以  
 GNU11  
 标准( 
 C11  
 标准的扩展版)编译  
 C  
 语言程序,以  
 GNU++14  
 标准(C++14  
 标准的扩展版)编译  
 C++  
 程序。  
 
 
         那么,我们可以手动控制 GCC  
 编译器使用哪个编译标准吗?答案是肯定的,对于编译C、 
 C++  
 程序来说,借助  
 -std  
 选项即可手动控制  
 GCC  
 编译程序时所使用的编译标准。也就是说,当使用 gcc  
 指令编译  
 C  
 语言程序时,我们可以借助  
 -std  
 选项指定要使用的编译标准;同样,当使用 g++  
 指令编译  
 C++  
 程序时,也可以借助  
 -std  
 选项指定要使用的编译标准。  
 
 
 -std  
 选项的使用方式很简单,其基本格式如下:  
 
gcc/g++ -std=编译标准
 
         注意,不同版本的 GCC  
 编译器,所支持使用的  
 C/C++  
 编译标准也是不同的。下表罗列了常 用的 GCC  
 版本对  
 C  
 语言编译标准的支持程度。 
 

 
 下表罗列了常用的  
 GCC  
 版本对  
 C++  
 程序编译标准的支持程度。  
 

 
         举个例子,下面是一段 C++代码,里面使用到了 C++11 标准的 auto 自动推导,如果你的编译器没有默认指定以 C++11 标准去编译的会可能就会报错,所以这时我们要手动指定编译标准。  
 
int main(int argc, char const *argv[])
{
    auto a = 10;
    cout << sizeof a << endl;
    return 0;
} 


















