【问题标题】:What is the __STDC_VERSION__ value for C11?C11 的 __STDC_VERSION__ 值是多少?
【发布时间】:2012-03-06 20:14:24
【问题描述】:

我知道编译器使用__STDC__ 表示编译器是标准C,并且从那里,您可以使用__STDC_VERSION__ 来确定您使用的标准的级别 .

我也知道C90没有价值,C90修正案1有199401L,C99有199901L

最新的 C1x 草案我简单地将其声明为 201ymmL,并且我假设它在最终标准中的值不那么“模糊”。

我的猜测是201112L,因为那是 C11 被批准的时候,但我想确定一下。

我想我可以尝试使用gcc -std=c1x,但我正在运行的gcc 版本还不支持。

有谁知道实际值是多少?

【问题讨论】:

  • 在任何情况下,C 版本的编号都足够粗略,您可以只测试> 201100L
  • Lundin:已经关闭了骗局。
  • @paxdiablo 是的,好吧......你和我都不适合这样做(以我们自己的帖子为目标关闭帖子作为欺骗),因为我们是部分的。链接的不是这个的欺骗,而是相反,因为 TC 还包含除__STDC_VERSION__ 之外的其他内容。
  • 作为任何人的附录,C17 的值是201710L

标签: c macros iso c11


【解决方案1】:

-std=c11gcc 中,201112L 用于__STDC_VERSION__

在 2011 年 12 月 20 日在gcc ml 上查看此 gcc 补丁:

https://www.mail-archive.com/gcc-patches@gcc.gnu.org/msg23572.html

请注意,显然 C11 的 ISO 版本忘记更新草案中的 201ymmL

预期的最终 __STDC_VERSION__201112L 也已实现(编辑在发送文档以供 ISO 发布之前忘记更新 201ymmL 占位符)。

另请参阅DR #411,这使得预期值为201112l 是官方的。小编说过"The committee is trying to get it approved as a TC as soon as possible."。 (TC =“技术勘误”)

编辑(2012 年 7 月 16 日): 2012 年 7 月 15 日发布的技术勘误 1 (ISO/IEC 9899:2011/Cor 1:2012) 将 __STDC_VERSION__ 修复为 201112L

【讨论】:

  • 那是哪个版本的 gcc?我的 Ubuntu 1104 是 4.5.2,如果我升级到 1110,我会被塞满,因为我听说可怕的 Unity 界面不再是可选的 :-)
  • 好像-std=c11已经添加到gcc 4.7 gcc.gnu.org/gcc-4.7/changes.html
  • @paxdiablo:你可以摆脱 Unity,但由于补丁是在 12 月 20 日提交的,它不在 Ubuntu 11.10 中。
  • 我有最终的 ISO 版本,我可以确认他们忘记更改它。它仍然像草稿中一样显示“201ymmL”。
  • ISO 昨天 2012 年 7 月 15 日发布了一个更正 Cor 1:2012 用于 C11:值 __STDC_VERSION__ 现在固定为 201112L iso.org/iso/home/store/catalogue_tc/…
【解决方案2】:

根据this 发帖到 GCC 邮件列表,最终值如您所料,是 201112L。

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多