76

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

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

4

2 回答 2

63

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

C17是 C11 标准的错误修复版本,集成了 DR [缺陷报告] 解决方案,即将进行投票。该补丁增加了相应的选项-std=c17-std=gnu17(新的默认版本,替换 -std=gnu11为默认)-std=iso9899:2017,。作为标准的错误修复版本,不需要flag_isoc17或任何选项兼容性警告;但是,有一个新__STDC_VERSION__ 值,因此添加了新的 cpplib 语言CLK_GNUC17CLK_STDC17以支持将新值与新选项一起使用。(如果该标准最终在 2018 年发布并被称为C18,则可以添加选项别名。但是请注意,这-std=iso9899:199409对应于一个 __STDC_VERSION__值而不是发布日期。)

(有几个 DR 解决方案需要在 GCC 中实施,但这与新选项无关。)

因此,C17 中没有包含新功能。

Cppreference(C 的历史)说:

未来发展

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

更新:

  • 2018: C17 (ISO/IEC 9899:2018) ( ISO Store) ( Final draftATOMIC_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]

于 2017-11-28T11:05:26.043 回答
29

C17是 C 标准的“错误修正版本”,“ 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.

于 2018-10-09T13:26:47.600 回答