什么是C17以及该语言有哪些变化?

inf*_*ero 60 c gcc iso c11 c17

当我查看有关GCC 8的新闻时,我看到他们增加了对2017版C语言的支持(不是C++ 17,真的是C17).但我在互联网上找不到任何关于它的信息.

它是像C11这样的新ISO版本,还是GCC团队用于编译器中某些更正的代号?

msc*_*msc 53

根据GCC参考,C17实际上是集成了DR分辨率的标准的错误修复版本C11.

C17,具有集成DR决议C11标准的一个bug修复版本,很快就会去投票.这个补丁增加了相应的选项-std=c17,-std=gnu17(新的默认版本,替换 -std=gnu11为默认)-std=iso9899:2017.作为标准的错误修复版本,不需要flag_isoc17或任何兼容性警告选项; 但是,有一个新__STDC_VERSION__ 值,所以添加了新的cpplib语言CLK_GNUC17,CLK_STDC17以支持将新值与新选项一起使用.(如果标准最终在2018年发布并且被称为C18,则可以添加选项别名.但是请注意,这-std=iso9899:199409对应于 __STDC_VERSION__值而不是发布日期.)

(有一些DR分辨率需要在GCC中实现,但这与新选项无关.)

因此,C17中没有新功能.

Cppreference(C史)说:

未来的发展

C17下一个次要C语言标准修订版,将包括所有已接受的C11缺陷报告,但没有新功能.

更新:

  • 2018年:C17(ISO/IEC 9899:2018)(ISO商店)(最终草案)包括ATOMIC_VAR_INIT以下缺陷报告的弃用和修正:

[DR 400],[DR 401],[DR 402],[DR 403], [DR 404],[DR 405],[DR 406],[DR 407], [DR 410],[DR 412],[DR 414],[DR 415], [DR 416],[DR 417],[DR 419],[DR 423], [DR 426],[DR 428],[DR 429],[DR 430], [DR 431],[DR 433],[DR 434],[DR 436], [DR 437],[DR 438],[DR 439],[DR 441], [DR 444],[DR 445],[DR 447],[DR 448], [DR 450],[DR 452],[DR 453],[DR 457], [DR 458],[DR 459],[DR 460],[DR 462], [DR 464],[DR 465],[DR 468],[DR 470], [DR 471],[DR 472],[DR 473],[DR 475], [DR 477],[DR 480],[DR 481],[DR 485], [DR 487],[DR 491]

  • 对于那些不习惯阅读标准乱码的人:DR代表缺陷报告. (18认同)
  • 为了补充这一点,实际上提出了一个有效的改变:使用`ATOMIC_VAR_INIT`对于原子变量的初始化不再是强制性的.普通正常初始化就足够了. (12认同)
  • C17标准现在可以购买,但我不确定为什么ANSI将价格从60美元提高到116美元约93%.https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+9899%3a2011+(R2017) (5认同)
  • 然后它由ISO发布,但它只是一个错误修复版本.谢谢 ! (3认同)

Nic*_*k S 15

C17是C标准的"bugfix发布"如何M.S Chaudhari被注意到.但是,书Jens Gustedt的作者准备了非常有用的信息"Modern C".


他指出在变化的以下列表C17相比C11:

链接到主页C17.


此外,此内容将更新,Jens您可以按照更新此处更新Jeans Gustedt博客.

P.S: before posting all this stuff I received approval from the author.

  • 非常整洁的书;谢谢。这就像克莱门斯的_21世纪C_的开放获取、更系统、更深入的版本。 (2认同)