GCC 8に関するニュースをチェックしていたとき、私は saw 2017バージョンのC言語(C++ 17ではなく、実際にはC17)のサポートを追加しました。しかし、インターネット上でそれに関する情報を見つけることができません。
それはC11のような新しいISOバージョンですか、それともGCCチームがコンパイラの修正のために使用するコードネームですか?
GCC リファレンスによると、C17
は、実際にはDR解像度が統合されたC11
標準のバグ修正バージョンです。
C17、統合されたDR解像度を備えたC11標準のバグ修正バージョン、まもなく投票に行きます。このパッチは、対応するオプション
-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__
値に対応することに注意してください。)(GCCでの実装が必要なDR解決策がいくつかありますが、それは新しいオプションとは無関係です。)
そのため、C17には新しい機能は含まれていません。
Cppreference(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]
C17
は、C規格の「バグ修正リリース」であり、「M.S Chaudhari
」に気付いた方法です。ただし、Jens Gustedt
本の著者"Modern C"
によって作成された非常に有用な情報があります。
彼は、C17
と比較したC11
の次の変更リストを特定しました。
atomics: 初期化(7.17.2、7.31.8) 、一貫性要件(5.1.2.4)、フェンス(7.17.3 p11)、関数またはマクロ(7.17.1 p6)、ロックフリーはタイプ(7.17.5 p3)に依存、 交換はメモリと値を比較しない(7.17.7.3) 、 atomic_flag(7.17.18) 。
threads:スプリアス障害(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)alignment:基本アライメント(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)、
ilogb
、erfc
、lgamma
。
clock
の仕様不足(7.27.2.1)サイズ0(7.22.3.5)の
realloc
の指定不足Annex F:
FLT_ROUNDS
(F.2 p1)Annex K:
tmpnam_s
、snprintf_s
、sprintf_s
、vsprintf_s
、get_s
、mbstowcs_s
、wcstombs_s
、snwprintf_s
、swprintf_s
、vsnwprintf_s
、vswprint_s
、mbsrtowcs_s
、wcsrtombs_s
。
メインページへのリンク C17 。
また、このコンテンツはJens
によって更新されます。ここで更新することができます Jeans Gustedt Blog .
P.S: before posting all this stuff I received approval from the author.