我知道对于C11,我可以测试#if(__STDC_VERSION >= 20112L)
。但对于-std=c1x
我应该测试什么样的宏和/或值?
这个标准的命名是什么?或者是非正式的名字,如果有的话。 我希望这很清楚。提前谢谢。
答案 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的评论提出了一个很好的观点。 201112L
将gcc -std=c11
设置为__STDC_VERSION__
,这应该意味着C11符合性,但事实上它仍然缺少C11功能的日志。我们可以预期在未来版本中会有所改进。
同样,201112LL
将-std=c99
设置为__STDC_VERSION__
,但完全不符合C99标准(记录当前状态{{3} gcc的C90一致性(199901L
或-ansi
)符合C90标准。