You need to enable JavaScript to run this app. 如何在Ubuntu 20.04下将GCC 9.3.0/Clang-11的默认C版本设为C11或C99?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu 20.04下将GCC 9.3.0/Clang-11的默认C版本设为C11或C99?

基于Ubuntu 20.04(GCC 9.3.0 / Clang-11)配置指定默认C编译标准的操作步骤

前置说明

GCC 8及更高版本在编译时未显式传入-std参数时,默认会启用带GNU扩展的C17标准,对应代码中判定的C18版本,这也是你当前编译直接输出C18提示的原因。
你可以根据实际使用场景选择两类配置方案:单次编译临时指定标准,或者全局永久修改默认编译参数。

单次编译临时指定C标准

这类配置不改动全局默认参数,仅对当前单次编译操作生效,适合单项目适配特定C标准的场景:

  • GCC编译场景:在原有编译命令后追加对应标准参数
    • 指定C11标准:追加 -std=c11(纯标准兼容)或 -std=gnu11(带GNU扩展)
    • 指定C99标准:追加 -std=c99 或 -std=gnu99
      示例:编译test.c生成可执行文件,指定C11标准的命令为 gcc test.c -std=c11 -o test
  • Clang-11编译场景:参数逻辑和GCC完全一致
    • 指定C11标准:clang-11 test.c -std=c11 -o test
    • 指定C99标准:clang-11 test.c -std=c99 -o test

全局永久修改默认C编译标准

这类配置完成后,后续所有终端调用对应编译器的场景都会默认带上指定的C标准参数,无需每次手动输入:

针对GCC 9.3的配置

  1. 打开当前用户的shell配置文件,使用bash就编辑~/.bashrc,使用zsh就编辑~/.zshrc
  2. 在文件末尾追加对应别名:
    • 全局默认C11:alias gcc='gcc -std=c11'
    • 全局默认C99:alias gcc='gcc -std=c99'
  3. 执行source ~/.bashrc让配置立即生效
  4. 如果需要对系统所有登录用户生效,可在/etc/profile.d/目录下新建gcc-c-std.sh脚本,写入上面的alias语句,给脚本加可执行权限后重启shell即可。

针对Clang-11的配置

和GCC的配置逻辑完全一致,在~/.bashrc末尾追加对应别名即可:

  • 全局默认C11:alias clang-11='clang-11 -std=c11'
  • 全局默认C99:alias clang-11='clang-11 -std=c99'

特殊场景注意事项

  • 如果项目使用Make、CMake等构建系统,且配置文件内硬编码调用了编译器的绝对路径(比如直接写/usr/bin/gcc),shell别名不会生效,需要在构建系统的配置中手动追加对应C标准参数:
    • Makefile场景:在CFLAGS变量中追加-std=c11(或-std=c99)
    • CMake场景:在CMakeLists.txt中追加set(CMAKE_C_STANDARD 11)(或99)

配置生效验证

完成配置后重新编译最开始的C标准检测代码,运行生成的可执行文件:

  • 输出We are using C11!说明C11配置已生效
  • 输出We are using C99!说明C99配置已生效

内容的提问来源于stack exchange,提问作者Kevin Mahendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 02:36:08