我知道对于 C11,我可以测试#if(__STDC_VERSION >= 20112L)
. 但对于-std=c1x
我应该测试什么宏和/或值?
这个标准的命名是什么?或者可能是一个非正式的名字,如果有的话。我希望这很清楚。提前致谢。
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 标准。