2

我知道对于 C11,我可以测试#if(__STDC_VERSION >= 20112L). 但对于-std=c1x

我应该测试什么宏和/或值?

这个标准的命名是什么?或者可能是一个非正式的名字,如果有的话。我希望这很清楚。提前致谢。

4

1 回答 1

6

gcc 的-std=c1x选项是 的同义词-std=c11,它设置__STDC_VERSION__为相同的值,201112L(注意:not 20112L)。

在发布之前,新的 C 标准被称为“C1X”(因为不知道它何时发布),并且 gcc 添加了一个-std=c1x选项来启用对即将发布的标准的部分支持。当标准作为 C11 发布时,添加了 gcc-std=c11以启用(仍然是部分)支持,但保留了-std=c1x兼容性选项。

(由于编辑错误,发布的 2011 ISO C 标准没有指定 的值__STDC_VERSION__,但编辑表示201112L是正确的;见这个问题。)

Jens Gustedt 的评论提出了一个很好的观点。gcc -std=c11设置__STDC_VERSION__201112LL,这应该意味着符合 C11,但实际上它仍然缺少 C11 功能的日志。我们可以期待这在未来的版本中得到改善。

同样,-std=c99设置__STDC_VERSION__199901L,但它不太符合 C99 标准(当前状态在此处记录。gcc 的 C90 一致性(带有-ansi-std=c90)非常符合 C90 标准。

于 2012-08-04T04:13:53.730 回答