C17是什么,语言有哪些变化?

85

我在查阅GCC 8的新闻时看到,他们为C语言的2017版本添加了支持(不是C++17,确实是C17),但我在互联网上找不到任何相关信息。

它是像C11一样的新ISO版本,还是GCC团队用于修复编译器中某些问题的代号?


3
ISO标准只允许发布一定数量(可能是两个)的技术勘误(TC)。如果您需要在已经发布了x个TC之后进行进一步更正,则必须发布该标准的新版本。我怀疑这就是在这里的情况。 - Lundin
3
C99有三个TC(技术报告),它们被纳入N1256。自那时以来,规则可能已经发生了变化。 - Keith Thompson
2个回答

68
根据GCC参考,C17实际上是C11标准的修复版本,集成了DR解决方案。

C17C11标准的修复版本,集成了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__值而不是出版日期。)

(还有一些需要在GCC中实现的DR解决方案,但这与新选项无关。)

所以,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]

3
然后它被ISO出版,但这只是一个修复漏洞的版本。谢谢! - informaticienzero
13
补充一下,实际上提出了一个有效的更改:不再需要使用 ATOMIC_VAR_INIT 来初始化原子变量。普通的初始化就足够了。 - Jens Gustedt
31
不习惯阅读标准无意义文本的人请注意:DR代表缺陷报告。 - Lundin
1
C17是否明确定义了使用聚合成员lvalue访问聚合存储的代码行为?在迄今的每个版本中,类似于struct foo {int x;} s = {0}; s.x = 3;这样的代码将使用类型为int的lvalue写入与struct foo相关联的存储,但是int不是可以用于访问struct foo的lvalue类型之一。 - supercat
5
C17标准现已上架出售,但我不确定为什么ANSI将价格从60美元涨到了116美元,涨幅约93%。 - m0j0
显示剩余11条评论

38

C17是C语言标准的“bugfix版本”,正如"M.S Chaudhari"所指出的。不过,"Modern C"一书作者Jens Gustedt提供了非常有用的信息。


他列出了以下关于C17相比于C11的变化:

链接到主页 C17


此外,这篇内容将由 Jens 更新,您可以在这里关注更新:Jeans Gustedt 博客

P.S:发布所有这些内容之前,我已经得到了作者的批准。


2
非常整洁的书籍,谢谢。这本书就像是Klemens的《21世纪C语言》的一个开放式、更系统化、深入的版本。 - Geremia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接