【问题标题】:What is C17 and what changes have been made to the language?什么是 C17,语言做了哪些改变?
【发布时间】:2018-05-11 19:24:23
【问题描述】:

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

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

【问题讨论】:

  • 您最多只能针对 ISO 标准发布一定数量(两个?)的技术勘误 (TC)。如果您在已经发布了 x 个 TC 后需要进一步修正,则必须发布新版本的标准。我怀疑这里就是这种情况。
  • @Lundin:C99 有三个 TC(合并到 N1256)。从那时起,规则可能已经改变。

标签: c gcc iso c11 c17


【解决方案1】:

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

C17具有 DR [缺陷报告] 分辨率的 C11 标准的错误修复版本 综合,很快就会去投票。这个补丁增加了相应的 选项-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 (History of C) 说:

未来发展

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

更新:

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

【讨论】:

  • 那么它是由ISO发布的,但它只是一个错误修复版本。谢谢!
  • 为了补充这一点,实际上提出了一项有效的更改:对于原子变量的初始化,不再强制使用ATOMIC_VAR_INIT。简单的正常初始化就足够了。
  • 对于那些不习惯阅读标准胡言乱语的人:DR 代表缺陷报告。
  • C17 是否明确定义了使用聚合成员左值访问聚合存储的代码的行为?在迄今为止的每个版本中,像struct foo {int x;} s = {0}; s.x = 3; 这样的东西会使用int 类型的左值写入与struct foo 关联的存储,但int 不是可用于访问@987654399 的左值类型之一@.
  • C17 标准现在可以购买,尽管我不确定 ANSI 为何将价格从 60 美元提高到 116 美元大约 93%。 webstore.ansi.org/…
【解决方案2】:

C17 是“M.S Chaudhari”注意到的 C 标准的“错误修复版本”。不过Jens Gustedt"Modern C"书的作者Jens Gustedt准备了非常有用的资料。


他确定了C17C11 相比的以下更改列表:

链接到主页C17


另外,此内容将由Jens更新,您可以关注更新 这里Jeans Gustedt Blog

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

【讨论】:

  • 非常整洁的书;谢谢。这就像 Klemens 的 21 世纪 C 的开放获取、更系统、更深入的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2016-11-07
  • 2012-09-30
  • 2016-05-03
  • 2011-05-15
相关资源
最近更新 更多