33

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

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

最新的 C1x 草案我只是简单地陈述了它,201ymmL并且我假设它在最终标准中被做了一个不那么“模糊”的值。

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

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

有谁知道实际值是多少?

4

2 回答 2

31

-std=c11in gcc,201112L用于__STDC_VERSION__

gcc请参阅2011 年 12 月 20 日关于gccml的此补丁:

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

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

还实现了预期的最终__STDC_VERSION__值(编辑器在发送文档以供 ISO 发布之前忘记更新占位符)。201112L201ymmL

另请参阅DR #411,这使得预期值为201112l. 编辑曾表示,“委员会正试图尽快将其作为 TC 批准。” . (TC =“技术勘误”)

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

于 2012-02-15T13:29:52.477 回答
2

根据GCC 邮件列表的这篇文章,最终值是,正如您所怀疑的,201112L。

于 2012-02-15T13:33:32.100 回答