Als ich die Nachrichten über GCC 8 überprüfte, habe ich gesehen dass sie Unterstützung für die Version 2017 der Sprache C hinzugefügt haben (nicht C++17, wirklich C17). Aber im Internet finde ich keine Informationen darüber.
Ist es eine neue ISO-Version wie C11 oder nur ein Codename, der vom GCC-Team für einige Korrekturen in seinem Compiler verwendet wird?
Entsprechend GCC Hinweis, C17
ist eigentlich ein Bugfix-Version des C11
Standard mit integrierten DR-Auflösungen.
C17, eine Bugfix-Version des C11-Standards mit DR [Defect Report] Auflösungen integriert, wird bald zur Wahl gehen. Dieser Patch fügt entsprechende Optionen hinzu -std=c17
, -std=gnu17
(neue Standardversion, ersetzt
-std=gnu11
als Standard), -std=iso9899:2017
. Als Bugfix-Version des Standards besteht keine Notwendigkeit für flag_isoc17
oder Optionen für Kompatibilitätswarnungen; Es gibt jedoch eine neue __STDC_VERSION__
Wert, also neue cpplib-Sprachen CLK_GNUC17
und CLK_STDC17
hinzugefügt, um die Verwendung dieses neuen Werts mit den neuen Optionen zu unterstützen. (Wenn der Standard 2018 veröffentlicht wird und als C18
, können Optionsaliase hinzugefügt werden. Beachte das aber -std=iso9899:199409
entspricht a
__STDC_VERSION__
Wert statt Veröffentlichungsdatum.)
(Es gibt ein paar DR-Auflösungen, die in GCC implementiert werden müssen, aber das ist unabhängig von den neuen Optionen.)
Es sind also keine neuen Funktionen in C17 enthalten.
Das Cpreference (Geschichte von C) sagt:
Zukünftige Entwicklung
C17 Die nächste kleinere Überarbeitung des C-Sprachstandards wird alle akzeptierten C11-Fehlerberichte enthalten, aber keine neuen Funktionen.
AKTUALISIEREN:
- 2018: C17 (ISO/IEC 9899:2018) (ISO Speichern) (Endgültige Entwurf) Beinhaltet die Abschreibung von
ATOMIC_VAR_INIT
und die Korrekturen an den folgenden Fehlerberichten:
[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
ist ein „Bugfix-Release“ des C-Standards wie „M.S Chaudhari
” bemerkt. Es gibt jedoch sehr nützliche Informationen, die von vorbereitet wurden Jens Gustedt
der Autor von "Modern C"
Buchen.
Er identifizierte die folgende Liste von Änderungen in C17
verglichen mit C11
:
-
Atome: Initialisierung (7.17.2, 7.31.8)Kohärenzanforderungen (5.1.2.4), Zäune (7.17.3 p11), Funktionen oder Makros (7.17.1 p6), lockfree abhängig vom Typ (7.17.5 p3), Vergleichsaustausch vergleicht Speicher und nicht Wert (7.17.7.3), Atom_Flag (7.17.18).
-
Fäden: Scheinfehler (7.26.3.5 p2, 7.26.3.6 p2, 7.26.4.5 p3)Synchronisierung (7.26.4 p1), Thread-spezifischer Speicher (tss_t
) und Threadausgang (7.26.5 p3, 7.26.5.5, 7.26.6)
-
_Generic
(6.5.1.1), rWerte und Qualifikationgegossen (6.5.4)
-
Ausrichtung: Grundausrichtung (6.2.8), _Alignas
(6.7.5), aligned_alloc
(7.22.3.1)
-
Sequenzpunkte: vollständige Ausdrücke (6.8 p4), vollständige Deklaratoren (6.7..6 p3)
-
Endlosschleifen (6.8.5 p6)
-
reservierte Kennungen (7.1.3)
-
Domänen- oder Bereichsfehler (7.12.1), ilogb
, erfc
, lgamma
.
-
Unterspezifikation von clock
(7.27.2.1)
-
Unterspezifikation von realloc
für Größe 0 (7.22.3.5)
-
Anhang F: FLT_ROUNDS
(F.2 p1)
-
Anhang 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
.
Link zur Hauptseite C17.
Außerdem wird dieser Inhalt von aktualisiert Jens
Sie können folgen, um hier zu aktualisieren Jeans-Gustedt-Blog.
P.S: before posting all this stuff I received approval from the author.
Sie dürfen nur bis zu einer bestimmten Anzahl (zwei?) Technische Berichtigungen (TC) zu einer ISO-Norm veröffentlichen. Wenn Sie weitere Korrekturen vornehmen müssen, nachdem Sie bereits x TC veröffentlicht haben, muss eine neue Version des Standards veröffentlicht werden. Ich vermute, dass dies hier der Fall ist.
– Ludin
29. November 2017 um 13:46 Uhr
@Lundin: Es gab drei TCs für C99 (eingebaut in N1256). Es ist möglich, dass sich die Regeln seitdem geändert haben.
– Keith Thompson
20. April 2018 um 15:50 Uhr