Gcc缺省使用的C/C++版本

GCC(GNU Compiler Collection)不同版本默认使用的 C 语言标准随着版本的变化而有所不同。以下是主要 GCC 版本的默认 C 语言标准:

GCC 版本 默认 C 语言标准
GCC 2.x C89(ANSI C)
GCC 3.x C89(ANSI C)
GCC 4.x C89(ANSI C),但部分版本支持 gnu89
GCC 5.x gnu89(GNU C89,带 GNU 扩展)
GCC 6.x gnu11(GNU C11,带 GNU 扩展)
GCC 7.x gnu11
GCC 8.x gnu11
GCC 9.x gnu11
GCC 10.x gnu17(GNU C17,带 GNU 扩展)
GCC 11.x gnu17
GCC 12.x gnu17
GCC 13.x gnu17

说明:

  • gnuXX 标准(如 gnu89, gnu11, gnu17)表示基于 cXX 标准,但增加了一些 GNU 扩展特性。
  • c89, c99, c11, c17, c23 等表示标准 C 语言(不带 GNU 扩展)。
  • 你可以通过 gcc -vgcc -dumpversion 查看 GCC 版本,并使用 gcc -E -dM - < /dev/null | grep __STDC_VERSION__ 确认默认的 __STDC_VERSION__ 值。
  • 要指定不同的 C 标准,可以使用 -std=cXX-std=gnuXX 选项,如:
    gcc -std=c99 myfile.c -o myfile
    

/home/mi gcc -E -dM - < /dev/null | grep __STDC_VERSION__
#define __STDC_VERSION__ 201710L/home/mi 

这条命令的输出:

#define __STDC_VERSION__ 201710L

表示 GCC 默认使用的 C 语言标准C17(ISO/IEC 9899:2018)

解释:

  1. gcc -E -dM - < /dev/null

    • -E:只进行预处理,不进行编译。
    • -dM:输出所有的宏定义(包括 GCC 预定义的宏)。
    • - < /dev/null:输入空文件(即不处理任何源代码,只打印 GCC 预定义的宏)。
  2. grep __STDC_VERSION__

    • 过滤出 __STDC_VERSION__ 这个宏,它表示 C 语言标准的版本。
  3. __STDC_VERSION__ 的值:

    • 199409L → C94(C89 + C95 修订)
    • 199901L → C99
    • 201112L → C11
    • 201710L → C17(GCC 10+ 默认)
    • 202311L → C23(如果支持)

你的 GCC 版本默认使用 gnu17(GNU C17)标准,因为 GCC 10 及以上版本的默认 C 标准是 gnu17(即 C17 + GNU 扩展)。你可以用以下命令确认你的 GCC 版本:

gcc --version

如果你想切换到其他 C 语言标准,可以使用 -std= 选项:

gcc -std=c99 myfile.c -o myfile  # 使用 C99
gcc -std=c11 myfile.c -o myfile  # 使用 C11
gcc -std=c17 myfile.c -o myfile  # 使用 C17
gcc -std=c23 myfile.c -o myfile  # 使用 C23(如果支持)

参考链接:

  • 所有Gcc版本对C和C++的支持情况(超详细版本)
  • https://gcc.gnu.org/releases.html

你可能感兴趣的:(我的博客,c语言,c++)