Was ist C17 und welche Änderungen wurden an der Sprache vorgenommen?

Lesezeit: 4 Minuten

Benutzeravatar von informaticienzero
Informatiker

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?

  • 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


Benutzeravatar von msc
msc

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]

  • Dann wird es von ISO veröffentlicht, aber es ist nur eine Bugfix-Version. Vielen Dank !

    – Informatiker

    28. November 2017 um 11:06 Uhr

  • Nur um das zu ergänzen, gibt es tatsächlich eine effektive Änderung, die vorgeschlagen wird: die Verwendung von ATOMIC_VAR_INIT ist für die Initialisierung atomarer Variablen nicht mehr zwingend erforderlich. Eine einfache normale Initialisierung reicht aus.

    – Jens Gustedt

    28. November 2017 um 13:12 Uhr


  • Für diejenigen, die es nicht gewohnt sind, Standardkauderwelsch zu lesen: DR steht für Defect Report.

    – Ludin

    29. November 2017 um 13:32 Uhr

  • Definiert C17 noch eindeutig das Verhalten von Code, der einen Aggregat-Member-lvalue verwendet, um auf den Speicher des Aggregats zuzugreifen? In jeder Version bis heute, so etwas wie struct foo {int x;} s = {0}; s.x = 3; würde den Speicher schreiben, der mit a verbunden ist struct foo mit einem lvalue vom Typ intaber int ist keiner der lvalue-Typen, die für den Zugriff auf a verwendet werden können struct foo.

    – Superkatze

    25. April 2018 um 17:34 Uhr

  • Der C17-Standard ist jetzt erhältlich, obwohl ich nicht sicher bin, warum ANSI den Preis um ungefähr 93 % von 60 $ auf 116 $ erhöht hat. webstore.ansi.org/…

    – m0j0

    26. April 2018 um 15:49 Uhr

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:

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.

  • Sehr ordentliches Buch; Danke. Es ist wie eine frei zugängliche, systematischere, tiefergehende Version von Klemens 21. Jahrhundert v.

    – Geremia

    5. Dezember 2018 um 3:07 Uhr

1418030cookie-checkWas ist C17 und welche Änderungen wurden an der Sprache vorgenommen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy