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

Jac*_*ack 2 c gcc4 c11

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

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

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

Kei*_*son 6

gcc的-std=c1x选项是同义词-std=c11,它设置__STDC_VERSION__为相同的值201112L(注意:不是 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标准完全一致.

  • +1,但我认为应该真正强调这不是一个特征测试宏的事实,因为`-std = c11`设置了这个而没有实现C11的所有强制性特征.基本上,根据我的经验,你不能从你的代码的'__STDC_VERSION__`的值中推断出太多. (2认同)