【问题标题】:Is there a command line involving gcc to know which --std=xxx it is using?是否有涉及 gcc 的命令行来知道它正在使用哪个 --std=xxx ?
【发布时间】:2021-04-18 13:23:32
【问题描述】:

我可以选择打电话

gcc --std=c99 toto.c -o toto.elf

但就我而言,我想知道调用时默认使用哪个--std

gcc toto.c -o toto.elf

关闭请求的注意事项: 我驳斥了这个话题是重复的想法,事实上,我想要的不仅是知道默认的 --std 是什么,而且知道当前使用的 --std 是什么以及 std=gnu11 和 std 之间的区别=c11。 当然,我的第一篇文章是在误导人们。

【问题讨论】:

标签: c gcc command-line


【解决方案1】:

我发现了这个gcc -dM -E - < /dev/null | grep 'STDC_VERSION'

【讨论】:

  • 这个解决方案的问题在于它在--std=gnu11--std=c11 之间没有区别。两者都给#define __STDC_VERSION__ 201112L
  • 您可以使用gcc -std=c11 -dM -E - < /dev/null | grep 'STDC_VERSION\|__STRICT_ANSI__' 来解决此问题。 __STRICT_ANSI__ 将在非 gnu 模式下定义。此外,gcc -std=c89 不会输出 STDC_VERSION - 所以当它丢失时,它是 c89(或更早??)。
【解决方案2】:
  • 5.0.0 之前的所有版本都默认使用 -std=gnu90
  • 5.0.0 和 8.0.0 版本之间的所有内容都默认使用 -std=gnu11
  • 8.0.0 之后的所有内容都默认使用 -std=gnu17

所以你只需要检查--version。但是,__STDC_VERSION__ 也应该对应于-std=cxx,即使在使用 GNU 扩展进行编译时也是如此。

【讨论】:

  • 根据its docs,GCC 10 默认为--std=gnu17。版本 8 和 9 也是如此。
  • @JohnBollinger Yikes,那我不是最新的!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多