【问题标题】:How to enable c11 on later versions of gcc?如何在更高版本的 gcc 上启用 c11?
【发布时间】:2013-04-27 20:29:53
【问题描述】:

我目前使用gcc 4.6.3。我的理解是 gcc 默认使用 gnu89 标准,我想启用最新的 C 标准 C11。我试过了:

[pauldb@pauldb-laptop test ]$ gcc -std=c11 -o test test.c
cc1: error: unrecognised command line option ‘-std=c11’

我用gnu11 替换了c11,我得到了同样的错误。为 gcc 启用最新 C 标准的正确方法是什么?

(注意:我对最新的 C 标准感兴趣,而不是最新的 C++ 标准。)

【问题讨论】:

  • 如果您对 gcc 的工作包装器感兴趣,它会影响 C11 的许多有趣位,请查看 P99,p99.gforge.inria.fr

标签: c gcc c11


【解决方案1】:

正确的选项是-std=c11

但是,它在gcc 4.6 中不可用。您至少需要gcc 4.7 才能支持此选项。在gcc 4.6 等一些旧版本中,-std=c1x 选项可用于 C11 的实验性(即非常有限)支持。

请注意,gcc 的当前版本是gcc 8.2

【讨论】:

  • 正确答案,但根据我的经验,-std=c11 还没有工作,要小心。 gcc 中缺少 C11 的一些部分,因此使用 C11 和 gcc 并不容易。
  • 4.8.1 刚刚发布gcc.gnu.org/ml/gcc-announce/2013/msg00004.html 完全支持
  • @bluszcz 说的是 g++ 和 C++11,gcc 和 C11 也一样吗?
【解决方案2】:

只是为了让您知道 GCC 4.9.x 比旧版本具有更完整的支持。如果你真的需要使用这个功能,请切换到任何 4.8+ 这里是支持状态——https://gcc.gnu.org/wiki/C11Status

【讨论】:

    【解决方案3】:

    gcc 5.2.0 与命令行选项“-std=c11”一起使用

    【讨论】:

      【解决方案4】:

      在 .spec 文件中:

      %define gcc_ver %(if [[ $(gcc -dumpversion) > 4.7 ]]; then echo 1; else echo 0; fi)
      # Do we use c11 ?
      %if 0%{?gcc_ver} < 1
        %global std_c11 0
      %else
        %global std_c11 1
      %endif
      
      # if the configure of the package supports it add :
      %if %{std_c11}
        --enable-cxx11 \
      %endif
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 它回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 2015-03-04
      • 2013-12-23
      相关资源
      最近更新 更多