GCC -std标准

获取更多嵌入式、Linux学习资料,获取独家嵌入式Linux学习路线地图,欢迎加群:398294860,观看更专业、更系统地嵌入式视频教程,请关注:wanglitao.taobao.com

同样一段C程序,使用GCC的不同标准去编译,编译的结果可能不相同。使用gcc -std参数可以指定GCC编译时的标准,常用的标准如下:

  • c89
  • c99
  • c11
  • gnu89、gnu90、gnu99、gnu11

gnu89和c89标准的区别是:gnu89除了支持和兼容c89标准外,在c89的基础上进行了语法扩展。

同样一段C程序,使用GCC不同的C标准去编译,结果可能就不一样:

# cat hello.c 
#include <stdio.h>

int main(void)
{
    int a[10];
    for(int i = 0; i < 10; i++)
        a[i] = i;
    return 0;
}

在C89标准中,是不准在for循环语句中定义一个变量的,使用-std=c89标准去编写上面的程序,你会发现程序报错:

# gcc -std=c89 hello.c 
hello.c: In function ‘main’:
hello.c:6:5: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
    6 |     for(int i = 0; i < 10; i++)
      |     ^~~
hello.c:6:5: note: use option ‘-std=c99’, ‘-std=gnu99’, ‘-std=c11’ or ‘-std=gnu11’ to compile your code

如果根据提示,使用C99、C11、gnu99等标准编译,就不会报错,可以正常编译:

# gcc -std=c99 hello.c 
#
《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客