如果使用-std = c1x,如何使用__STDC_VERSION__进行检查?

时间:2012-08-04 03:16:48

标签: c gcc4 c11

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

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

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

1 个答案:

答案 0 :(得分:6)

gcc的-std=c1x选项与-std=c11同义,并将__STDC_VERSION__设置为相同的值201112L(注意:不是 {{ 1}})。

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

(由于编辑错误,发布的2011 ISO C标准未指定-std=c1x的值,但编辑已声明__STDC_VERSION__是正确的;请参阅this question。 )

Jens Gustedt的评论提出了一个很好的观点。 201112Lgcc -std=c11设置为__STDC_VERSION__,这应该意味着C11符合性,但事实上它仍然缺少C11功能的日志。我们可以预期在未来版本中会有所改进。

同样,201112LL-std=c99设置为__STDC_VERSION__,但完全不符合C99标准(记录当前状态{{3} gcc的C90一致性(199901L-ansi)符合C90标准。