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

时间:2017-11-28 10:57:03

标签: c gcc iso c11 c17

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

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

2 个答案:

答案 0 :(得分:50)

根据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对应于a   __STDC_VERSION__值而不是发布日期。)

     

(有一些DR决议需要在GCC中实施,但是   这与新选项无关。)

因此,C17中没有新功能。

Cppreference (History of C)说:

  

未来发展

     

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

<强>更新

  
      
  • 2018:C17(ISO / IEC 9899:2018)(ISO商店)(Final draft)包括ATOMIC_VAR_INIT的弃用以及对{{1}}的修正   以下缺陷报告:
  •   
     

[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]

答案 1 :(得分:13)

C17是C标准的“错误修正版本”,如何引起“ M.S Chaudhari”的注意。但是,Jens Gustedt书的作者"Modern C"准备了非常有用的信息。


他确定了C17C11相比的以下变化列表:

  
      
  • 原子 initialization (7.17.2, 7.31.8),相关性要求(5.1.2.4),篱笆(7.17.3 p11),函数或宏(7.17.1 p6),无锁取决于类型(7.17.5 p3),compare exchange compares memory and not value (7.17.7.3)atomic_flag (7.17.18)

  •   
  • 线程: spurious failures (7.26.3.5 p2, 7.26.3.6 p2, 7.26.4.5 p3),同步(7.26.4 p1),特定于线程的存储(tss_t)和线程退出(7.26.5 p3,7.26)。 5.5,7.26.6)

  •   
  • _Generic (6.5.1.1), rvalues and qualification, cast (6.5.4)

  •   
  • 对齐方式:基本对齐方式(6.2.8),_Alignas(6.7.5),aligned_alloc(7.22.3.1)

  •   
  • 序列点:完整表达式(6.8 p4),完整声明符(6.7..6 p3)

  •   
  • 无限循环(6.8.5 p6)

  •   
  • 保留的标识符(7.1.3)

  •   
  • 域或范围错误(7.12.1),ilogberfclgamma

  •   
  • clock 的规格不足(7.27.2.1)

  •   
  • realloc 的规格不足,大小为0(7.22.3.5)

  •   
  • 附件F: FLT_ROUNDS(F.2 p1)

  •   
  • 附件K: tmpnam_ssnprintf_ssprintf_svsprintf_sget_s,{{1} },mbstowcs_swcstombs_ssnwprintf_sswprintf_svsnwprintf_svswprint_smbsrtowcs_s

      

链接到主页C17


此外,此内容将由wcsrtombs_s更新,您可以按照该更新 在Jeans Gustedt Blog

Jens