C23 , offiziell ISO/IEC 9899:2024 , ist der aktuelle offene Standard für die Programmiersprache C und löst C17 (Standard ISO/IEC 9899:2018) ab. [ 1 ] Die Entwicklung begann 2016 informell unter dem Namen C2x [ 2 ] und wurde am 31. Oktober 2024 veröffentlicht. [ 3 ] Der frei verfügbare Entwurf, der dem veröffentlichten Entwurf am ähnlichsten ist, ist Dokument N3220 [ 4 ] (siehe „Verfügbare Texte“ weiter unten). Das erste Treffen der Arbeitsgruppe 14 (WG14) zum C2x-Entwurf fand im Oktober 2019 statt. [ 5 ] Aufgrund der COVID-19-Pandemie wurden 2020 virtuelle Treffen abgehalten , und auch im Jahr 2024 fanden weiterhin verschiedene Telefonkonferenzen statt.

GCC unterstützt C23 (und nur unvollständig C2Y). [ 6 ] Clang bietet teilweise Unterstützung für C23.

In C23 __STDC_VERSION__ändert sich der Wert von 201710Lzu 202311L. Die gebräuchlichen Bezeichnungen „C17“ und „C23“ spiegeln diese Werte wider, die vor der endgültigen Annahme eingefroren werden, und nicht die Jahre in den ISO-Normenkennungen (9899:2018 und 9899:2024).

Merkmale

Die im neuesten Arbeitsentwurf von C23 enthaltenen Änderungen sind nachfolgend aufgeführt. [ 7 ]

Konstanten

  • Füge nullptreine Konstante für nullptr_tden Typ hinzu. [ 8 ]
  • Füge 'Zifferntrennzeichen zu Literalkonstanten hinzu, [ 9 ] wie z.B. 0xFE'DC'BA'98(entspricht 0xFEDCBA98), 299'792'458(entspricht 299792458 ), 1.414'213'562(entspricht 1.414213562 ).
  • 0bEs wurden Präfixe 0Bfür Binärliterale hinzugefügt , [ 10 ] beispielsweise 0b10101010(entspricht 0xAA), die bereits im C++14- Standard eingeführt wurden. Diese Änderung ähnelt den zuvor eingeführten0x Hexadezimalpräfixen .0X
  • Addiert man wbdie Suffixe für Integeruwb -Literale der Typen und , so ergibt sich beispielsweise ein , und ergibt sich ein , das drei Wertbits und ein Vorzeichenbit besitzt._BitInt(N)unsigned_BitInt(N)6uwbunsigned _BitInt(3)-6wbsigned _BitInt(4)
  • enumDie Möglichkeit hinzufügen, den zugrunde liegenden Typ eines . [ 12 ] anzugeben.
  • Erlaubt es enum, Werte ohne festen zugrunde liegenden Typ zu speichern, die nicht durch darstellbar sind int. [ 13 ]

Schlüsselwörter

  • Fügen Sie trueSchlüsselwörter hinzu false. [ 14 ]
  • Füge die Schlüsselwörter alignas, alignof, bool, static_assert, hinzu. Zuvor definierte Schlüsselwörter werden zu alternativen Schreibweisen: , , , , . [ 15 ]thread_local_Alignas_Alignof_Bool_Static_assert_Thread_local
  • Füge das Schlüsselwort hinzu _BitInt(siehe Gruppe „Typen“).
  • Fügen Sie typeofweitere typeof_unqualSchlüsselwörter hinzu (siehe Gruppe „Typen“).
  • Füge nullptrdas Schlüsselwort hinzu (siehe Gruppe „Konstanten“).
  • Schlüsselwort hinzufügen constexpr(siehe Gruppe „Sonstige“).
  • Fügen Sie die Schlüsselwörter _Decimal32, _Decimal64, _Decimal128für (optionale) Dezimal-Gleitkommaarithmetik hinzu (siehe Gruppe „Sonstige“).

Typen

  • Fügen Sie nullptr_teinen Nullzeigertyp hinzu . [ 8 ]
  • Füge Typen für bitgenaue Ganzzahlen hinzu. Füge ein Makro für die maximale Bitbreite hinzu. [ 16 ] [ 17 ]_BitInt(N)unsigned_BitInt(N)BITINT_MAXWIDTH
  • Füge ckd_add(), ckd_sub(), ckd_mul()Makros für geprüfte Ganzzahloperationen hinzu. [ 18 ]
  • Variabel modifizierbare Typen (jedoch nicht VLAs , die automatisch auf dem Stack allokierte Variablen sind) werden zu einem obligatorischen Merkmal. [ 19 ]
  • Verbesserte Unterstützung für die Verwendung constmit Arrays. [ 20 ]
  • Standardisierung des typeof(...)Bedieners. [ 21 ]
  • Die Bedeutung des autoSchlüsselworts wurde geändert, um Typinferenz zu ermöglichen, wobei seine alte Bedeutung als Speicherklassenspezifizierer beibehalten wurde , wenn es zusammen mit einem Typ verwendet wurde. Im Gegensatz zu C++ erlaubt C23 Typinferenz nur für Objektdefinitionen (keine Inferenz des Rückgabetyps oder Parametertyps von Funktionen). [ 22 ]
  • Die Kompatibilitätsregeln für Struktur-, Union- und Aufzählungstypen wurden geändert, um eine erneute Deklaration eines kompatiblen Typs mit demselben Tag zu ermöglichen. [ 23 ]
  • Ganzzahlen mit exakter Breite können nun intmax_t(N2888) überschreiten. [ 24 ]
  • Geben Sie an, dass bei der Definition derselbe Typ wie [ 25 ] angegeben werden muss.[u]intN_t[u]int_leastN_t

Syntax

  • Labels können vor Deklarationen und am Ende von zusammengesetzten Anweisungen erscheinen . [ 26 ]
  • Unbenannte Parameter in Funktionsdefinitionen. [ 27 ]
  • Nullinitialisierung {}(einschließlich der Initialisierung von VLAs). [ 28 ]
  • Variadische Funktionen benötigen kein benanntes Argument mehr vor den Auslassungspunkten, und das va_startMakro benötigt kein zweites Argument mehr und wertet auch kein weiteres Argument nach dem ersten aus, falls vorhanden. [ 29 ]
  • Fügen Sie die Attributsyntax im C++11- Stil [ 30 ] mit doppelten eckigen Klammern hinzu . Zusätzlich zu den unten aufgeführten C++11 -Attributen fügen Sie neue Attribute hinzu: [[]]
    • [[unsequenced]][ 31 ] erlaubt Compileroptimierungen für Funktionen, die wiederholbare Ausgaben erzeugen, ausschließlich auf der Grundlage ihrer Parameter
    • [[reproducible]], [ 31 ] ähnlich wie [[unsequenced]], jedoch für Funktionen, deren Aufrufreihenfolge ebenfalls von Bedeutung ist
  • Füge ein einzelnes Argument hinzu static_assert, um die Kompatibilität mit C++17 zu gewährleisten . [ 32 ]
  • Funktionen, bei denen im Prototyp keine Argumente aufgeführt sind (z. B. void foo()), werden so verstanden, dass sie keine Argumente annehmen (siehe Entfernung von K&R-Funktionsdeklarationen).

Präprozessor

  • Fügen Sie die Direktiven `add` #elifdefund `add` hinzu , [ 33 ] die im Wesentlichen äquivalent zu `add` und `add` sind. Beide Direktiven wurden dem C++23- Standard und GCC 12 hinzugefügt. [ 34 ]#elifndef#elif defined#elif !defined
  • Fügt #embedeine Direktive zum Einbinden binärer Ressourcen hinzu und __has_embedermöglicht es Präprozessor-Direktiven, die Verfügbarkeit einer Ressource zu überprüfen. [ 35 ]
  • Füge #warningeine Anweisung für die Diagnose hinzu. [ 36 ]
  • __has_includeDie Möglichkeit, die Verfügbarkeit eines Headers durch Präprozessor-Direktiven zu überprüfen, wird hinzugefügt . [ 37 ]
  • __has_c_attributeDie Verfügbarkeit eines Attributs kann nun durch Präprozessor-Direktiven geprüft werden. [ 38 ] ( Siehe Gruppe „ C++ -Kompatibilität“ für weitere Informationen zu diesem neuen Attributmerkmal.)
  • Füge __VA_OPT__ein funktionales Makro für variadische Makros hinzu , das nur dann zu seinem Argument expandiert, wenn dem enthaltenden Makro ein variadisches Argument übergeben wurde. [ 39 ]

C++-Kompatibilität

  • Diverse Syntaxänderungen verbessern die Kompatibilität mit C++, beispielsweise durch Labels vor Deklarationen, unbenannte Funktionsargumente, Nullinitialisierung mit `init` {}, Funktionen mit variabler Argumentanzahl ohne benannte Argumente und Attribute im C++11_Static_assert -Stil (siehe Syntax). Für Labels am Ende zusammengesetzter Anweisungen wurde eine entsprechende Änderung in C++23 vorgenommen . [ 40 ]
  • Fügen Sie Attribute im C++-Stil hinzu (siehe Syntax). Fügen Sie die Attribute [ 41 ] , [ 42 ] , [ 43 ] , [ 44 ] , [ 45 ] und das Attribut für die Kompatibilität mit C++11 hinzu und kennzeichnen Sie anschließend die in C11 eingeführten Header- Funktionen als veraltet . [ 46 ] Doppelte Attribute sind aus Kompatibilitätsgründen mit C++23 zulässig . [ 47 ] Alle Standardattribute können auch in doppelte Unterstriche eingeschlossen werden (z. B. ist äquivalent zu ).[[deprecated]][[fallthrough]][[maybe_unused]][[nodiscard]][[noreturn]]_Noreturnnoreturn<stdnoreturn.h>[[__deprecated__]][[deprecated]]
  • Füge u8ein Präfix für Zeichenliterale hinzu, um die UTF-8- Kodierung für die Kompatibilität mit C++17 darzustellen . [ 48 ] [ 49 ]
  • Hinzufügen #elifdefund #elifndefPräprozessor-Direktiven für die Kompatibilität mit C++23 . [ 33 ] (siehe Gruppe „Präprozessor“)

Andere

  • Unterstützung für ISO/IEC 60559:2020, die aktuelle Version des IEEE-754-Standards für Gleitkommaarithmetik, mit erweiterter binärer Gleitkommaarithmetik und (optionaler) dezimaler Gleitkommaarithmetik. [ 50 ] [ 51 ]
  • Der constexprSpezifizierer gilt für Objekte, aber nicht für Funktionen, im Gegensatz zum entsprechenden Attribut in C++ . [ 52 ]
  • Fügen Sie char8_teinen Datentyp zum Speichern von UTF-8- kodierten Daten hinzu und ändern Sie den Datentyp von u8-Zeichenkonstanten und Stringliteralen in char8_t. Außerdem werden die Funktionen mbrtoc8()und c8rtomb()zur Konvertierung eines schmalen Multibyte-Zeichens in die UTF-8-Kodierung bzw. eines einzelnen Codepunkts von UTF-8 in eine schmale Multibyte-Zeichendarstellung hinzugefügt. [ 53 ]
  • Es wird klargestellt, dass alle char16_tZeichenketten und Literale UTF-16- kodiert und alle Zeichenketten und Literale UTF-32-char32_t kodiert sein müssen , sofern nicht ausdrücklich anders angegeben. [ 54 ]
  • Erlauben Sie, dass Speicherklassenspezifizierer in zusammengesetzten Literaldefinitionen vorkommen. [ 55 ]

Standardbibliothek

Vorhandene Funktionen

  • Füge der Funktionsfamilie %beinen Binärkonvertierungsspezifizierer hinzu. [ 56 ]printf()
  • Füge der Funktionsfamilie %beinen Binärkonvertierungsspezifizierer hinzu. [ 56 ]scanf()
  • Füge Unterstützung für Binärkonvertierung zu den Funktionen , , , , und ihren breiten Entsprechungen , , , 0bhinzu . Wenn ein Vorzeichen vorhanden ist, folgt das oder dem Vorzeichen. [ 56 ]0Bstrtol()strtoll()strtoul()strtoull()wcstol()wcstoll()wcstoul()wcstoull()0b0B
  • Fügen Sie spezifische Breitenmodifikatoren und Funktionsfamilien hinzu . [ 25 ]%wN%wfNprintf()
  • Fügen Sie spezifische Breitenmodifikatoren und zur scanf- Funktionsfamilie hinzu. [ 25 ]%wN%wfN()
  • Die Funktionen bsearch(), bsearch_s(), memchr(), strchr(), strpbrk(), strrchr(), strstr(), und ihre entsprechenden erweiterten Funktionen wmemchr(), wcschr(), wcspbrk(), wcsrchr(), wcsstr()sollen ein const qualifiziertes Objekt zurückgeben, falls ihnen ein solches übergeben wurde. [ 57 ]

Neue Funktionen

  • Fügen Sie memset_explicit()eine Funktion zum Löschen sensibler Daten hinzu, wobei die Speicherung im Speicher unabhängig von Optimierungen immer erfolgen muss. [ 58 ]<string.h>
  • memccpy()Eine Funktion zum effizienten Verketten von Zeichenketten hinzufügen <string.h>– ähnlich den POSIX- und SVID- C-Erweiterungen. [ 59 ]
  • Fügen Sie strdup()Funktionen strndup()hinzu <string.h>, um eine Kopie einer Zeichenkette zu allokieren – ähnlich den POSIX- und SVID- C-Erweiterungen. [ 60 ]
  • Fügen Sie memalignment()eine Funktion hinzu , um die Byte-Ausrichtung eines Zeigers zu bestimmen. [ 61 ]<stdlib.h>
  • Fügen Sie free_sized()Funktionen free_aligned_sized()hinzu , um den Speicher effizienter freizugeben, wenn die Größe bekannt ist. [ 62 ]<stdlib.h>
  • Fügen Sie in einer neuen Headerdatei Hilfsfunktionen, Makros und Typen hinzu , um viele Integer-Typen zu untersuchen. Alle beginnen mit einem Präfix, um Konflikte mit bestehendem Code und Bibliotheken von Drittanbietern zu minimieren. [ 63 ]<stdbit.h>stdc_
    • *Ersetzen Sie im Folgenden uc, us, ui, ul, ulldurch fünf Funktionsnamen oder lassen Sie die Platzhalter für ein typgenerisches Makro leer. [ 63 ]
    • Addiere stdc_count_ones_*()und stdc_count_zeros_*()zähle die Anzahl der 1- oder 0-Bits im Wert. [ 63 ]
    • Addiere stdc_leading_ones_*()und stdc_leading_zeros_*()zähle die führenden 1- oder 0-Bits im Wert. [ 63 ]
    • Addiere stdc_trailing_ones_*()und stdc_trailing_zeros_*()zähle die nachfolgenden 1- oder 0-Bits im Wert. [ 63 ]
    • Addiere stdc_first_leading_one_*()und , stdc_first_leading_zero_*()um das erste führende Bit mit dem Wert 1 oder 0 zu finden. [ 63 ]
    • Addiere stdc_first_trailing_one_*()und , stdc_first_trailing_zero_*()um das erste nachfolgende Bit mit dem Wert 1 oder 0 zu finden. [ 63 ]
    • Addiere stdc_has_single_bit_*(), um festzustellen, ob der Wert eine exakte Zweierpotenz ist (gib genau dann „true“ zurück, wenn ein einzelnes 1-Bit vorhanden ist). [ 63 ]
    • Addiere stdc_bit_floor_*(), um die größte ganzzahlige Potenz von 2 zu bestimmen, die nicht größer als der Wert ist. [ 63 ]
    • Addiere stdc_bit_ceil_*(), um die kleinste ganzzahlige Potenz von 2 zu bestimmen, die nicht kleiner als der Wert ist. [ 63 ]
    • Addieren Sie die Werte stdc_bit_width_*(), um die Anzahl der Bits zu bestimmen, die einen Wert darstellen sollen. [ 63 ]
  • Füge timegm()eine Funktion hinzu , die eine Zeitstruktur in einen Kalenderzeitwert umwandelt – ähnlich der Funktion in den Bibliotheken glibc und musl . [ 64 ]<time.h>
  • Neue Funktionen basierend auf den Empfehlungen von IEEE 754-2019, wie z. B. trigonometrische Funktionen, die auf Einheiten von und operieren . [ 65 ]<math.h>exp10

Veraltete Funktionen

Veraltete Funktionen der Programmiersprache C, die aus C23 entfernt oder als veraltet markiert wurden:

  • Entferne Trigraphien . [ 66 ]
  • K&R -Funktionsdefinitionen/-deklarationen (ohne Angabe der Funktionsargumente) entfernen . [ 67 ] [ 68 ]
  • Entferne Darstellungen für vorzeichenbehaftete ganze Zahlen außer der Zweierkomplementdarstellung. Die Zweierkomplementdarstellung vorzeichenbehafteter ganzer Zahlen wird benötigt. [ 69 ]
  • Die Makros darin sind veraltete Funktionen. [ 70 ]*_HAS_SUBNORM<float.h>

Compilerunterstützung

Die folgenden Compiler implementieren ein experimentelles Compiler-Flag zur Unterstützung dieses Standards:

Darüber hinaus verwenden GCC-Versionen ab GCC 15 standardmäßig C23. [ 74 ]

Verfügbare Texte

Wie bei anderen Ausgaben des C-Standards ist auch hier der offizielle ISO-Text des Standards nicht frei verfügbar.

Der letzte veröffentlichte Arbeitsentwurf vor C23 war N3096 ​​[ 7 ] vom 1. April 2023. In den darauffolgenden Monaten wurden Hunderte von Änderungen [ 75 ] vorgenommen, bevor der Arbeitsentwurf N3149 vom 9. Juli 2023 und der offizielle Normenentwurf N3219 vom 22. Februar 2024 [ 75 ] [ 76 ] erstellt wurden. Keiner dieser späteren Entwürfe ist öffentlich. [ 75 ] [ 76 ]

Am selben Tag, an dem der Normenentwurf N3219 veröffentlicht wurde, wurde auch ein neuer Arbeitsentwurf N3220 [ 4 ] publiziert. Obwohl dieses Dokument offiziell [ 76 ] als Entwurf der zukünftigen Version „C2Y“ der Norm bezeichnet wird, gibt der beigefügte „Editor’s Report“ an, dass sich N3220 vom Normenentwurf C23 N3219 lediglich durch eine Korrektur einer Fußnote in Anhang K unterscheidet. [ 76 ]

Siehe auch

Referenzen

  1. ^ „Geschichte von C“ . cppreference.com . 27.06.2022. Archiviert vom Original am 19. Oktober 2022.
  2. ^ „WG14-N2086: C2x Charter“ . open-std.org . 2016-09-20. Archiviert vom Original am 22. Dezember 2022.
  3. ^ „ISO/IEC PRF 9899“ . iso.org . Archiviert vom Original am 19. September 2024. Abgerufen am 20. März 2024 .
  4. ^ a b "ISO/IEC 9899:2024 (en) — N3220 Arbeitsentwurf" (PDF) . open-std.org . 2024-02-22.
  5. ^ „WG14-N2437: Tagesordnung für Oktober 2019“ . open-std.org . 21.10.2019. Archiviert vom Original am 5. März 2021.
  6. ^ „C-Standardunterstützung in GCC – GNU-Projekt“ . gcc.gnu.org . Abgerufen am 8. April 2026 .
  7. ^ a b "WG14-N3096: Entwurf für ISO/IEC 9899:2024" (PDF) . open-std.org . 1. April 2023. Archiviert (PDF) vom Original am 2. April 2023.
  8. ^ a b „WR14-N3042: Einführung der Nullzeigerkonstante“ . open-std.org . 22.07.2022. Archiviert vom Original am 24. Dezember 2022.
  9. ^ „WG14-N2626: Zifferntrennzeichen“ (PDF) . open-std.org . 15.12.2020. Archiviert (PDF) vom Original am 19.12.2022.
  10. ^ „WG14-N2549: Zulassung binärer Ganzzahlkonstanten“ (PDF) . open-std.org . 30.07.2020. Archiviert (PDF) vom Original am 22.12.2022.
  11. ^ „WG14-N2775: Literal suffixes for bit-precise integers“ (PDF) . open-std.org . 13.07.2021. Archiviert (PDF) vom Original am 27.12.2022.
  12. ^ „WG14-N3030: Erweiterungen für Aufzählungen“ . open-std.org . 19.07.2022. Archiviert vom Original am 26. November 2022.
  13. ^ „WG14-N3029: Verbesserte Normalenaufzählungen“ . open-std.org . 19.07.2022. Archiviert vom Original am 29. Januar 2023.
  14. ^ „WG14-N2935: Make false and true first-class language features“ (PDF) . open-std.org . 15. Februar 2022. Archiviert (PDF) vom Original am 21. November 2022.
  15. ^ „WG14-N2934: Rechtschreibung von Schlüsselwörtern überarbeiten“ (PDF) . open-std.org . 15.02.2022. Archiviert (PDF) vom Original am 24. Dezember 2022.
  16. ^ „WG14-N2763: Hinzufügen eines fundamentalen Datentyps für N-Bit-Ganzzahlen“ (PDF) . open-std.org . 21.06.2021. Archiviert (PDF) vom Original am 27.12.2022.
  17. ^ „WG14-N3035: _BitInt Fixes“ (PDF) . open-std.org . 21.07.2022. Archiviert (PDF) vom Original am 13. Oktober 2022.
  18. ^ „WG14-N2867: Geprüfte N-Bit-Ganzzahlen“ (PDF) . open-std.org . 28.11.2021. Archiviert (PDF) vom Original am 14.12.2022.
  19. ^ „WG14-N2778: Variably-Modified Types“ (PDF) . open-std.org . 11.07.2021. Archiviert (PDF) vom Original am 22.12.2022.
  20. ^ „WG14-N2607: Kompatibilität von Zeigern auf Arrays mit Qualifizierern“ (PDF) . open-std.org . 31.10.2020. Archiviert (PDF) vom Original am 13.10.2022.
  21. ^ „WG14-N2899: Nicht ganz so magisch – typeof für C“ . open-std.org . 21.01.2022. Archiviert vom Original am 24. Dezember 2022.
  22. ^ „WG14-N3007: Typinferenz für Objektdefinitionen“ . open-std.org . 10.06.2022. Archiviert vom Original am 24. Dezember 2022.
  23. ^ "WG14-N3037: Verbesserte Regeln für die Tag-Kompatibilität (Aktualisierungen von N3032)" (PDF) .
  24. ^ „C23 ist beendet: Hier ist das Programm“ . The Pasture . 31. Juli 2022.
  25. ^ a b c Seacord, Robert C. (09.03.2021). „WG14-N2680: Spezifischer Breiten-Längen-Modifikator“ (PDF) . open-std.org . Archiviert (PDF) vom Original am 19.02.2025 . Abgerufen am 18.11.2025 .
  26. ^ „WG14-N2508: Freie Positionierung von Labels innerhalb zusammengesetzter Anweisungen“ (PDF) . open-std.org . 28.03.2020. Archiviert (PDF) vom Original am 27.12.2022.
  27. ^ „WG14-N2510: Zulassung unbenannter Parameter in einer Funktionsdefinition“ (PDF) . open-std.org . 09.04.2020. Archiviert (PDF) vom Original am 24.12.2022.
  28. ^ „WG14-N2900: Konsistente, warnungslose und intuitive Initialisierung mit {}“ . open-std.org . 1. Januar 2022. Archiviert vom Original am 27. Dezember 2022.
  29. ^ „WG14-N2975: Lockerung der Anforderungen an variadische Parameterlisten“ (PDF) . open-std.org . 15.04.2022. Archiviert (PDF) vom Original am 28. November 2022.
  30. ^ „WG14-N2335: Attribute in C“ (PDF) . open-std.org . 09.03.2019. Archiviert (PDF) vom Original am 26. Oktober 2022.
  31. ^ a b „Unsequenzielle Funktionen“ . open-std.org . Abgerufen am 18.07.2024 .
  32. ^ „WG14-N2265: Harmonisierung von static_assert mit C++“ (PDF) . open-std.org . 06.07.2018. Archiviert (PDF) vom Original am 28. März 2023.
  33. ^ a b "WG14-N2645: Unterstützung für die Präprozessor-Direktiven #elifdef und #elifndef hinzufügen" (PDF) . open-std.org . 25.01.2020. Archiviert (PDF) vom Original am 28.11.2022.
  34. ^ „GCC 12 führt Unterstützung für die neuen #elifdef #elifndef Direktiven ein“ . phoronix . 12. Mai 2021. Archiviert vom Original am 27. Dezember 2022.
  35. ^ „WG14-N3017: #embed – ein durchsuchbarer, toolfreundlicher Mechanismus zur Einbindung binärer Ressourcen“ . open-std.org . 27.06.2022. Archiviert vom Original am 24. Dezember 2022.
  36. ^ "WG14-N2686: #Warnung" (PDF) . open-std.org . 22.07.2022. Archiviert (PDF) vom Original am 28. November 2022.
  37. ^ „WG14-N2799: __has_include für C“ (PDF) . open-std.org . 30.08.2021. Archiviert (PDF) vom Original am 24.12.2022.
  38. ^ „WG14-N2553: Abfrage der Attributunterstützung“ (PDF) . open-std.org . 04.08.2020. Archiviert (PDF) vom Original am 14. Oktober 2022.
  39. ^ „WG14-N3033: Kommaauslassung und Kommalöschung“ . open-std.org . 2022-07-20. Archiviert vom Original am 27. Dezember 2022.
  40. ^ „Labels at the end of compound statements (C compatibility)“ (PDF) . 2022-01-13.
  41. ^ „WG14-N2554: Kleinere Überarbeitung der Attributformulierungen“ (PDF) . open-std.org . 04.08.2020. Archiviert (PDF) vom Original am 28. November 2022.
  42. ^ „WG14-N2334: Das veraltete Attribut“ (PDF) . open-std.org . 22.01.2019. Archiviert (PDF) vom Original am 19. Oktober 2022.
  43. ^ „WG14-N2408: Das Fallthrough-Attribut“ (PDF) . open-std.org . 11.08.2019. Archiviert (PDF) vom Original am 25.12.2022.
  44. ^ „WG14-N2270: Das Attribut maybe_unused“ (PDF) . open-std.org . 06.07.2018. Archiviert (PDF) vom Original am 25.12.2022.
  45. ^ „WG14-N2267: Das nodiscard-Attribut“ (PDF) . open-std.org . 06.07.2018. Archiviert (PDF) vom Original am 19. Oktober 2022.
  46. ^ „WG14-N2764: Das noreturn-Attribut“ (PDF) . open-std.org . 21.06.2021. Archiviert (PDF) vom Original am 25.12.2022.
  47. ^ „WG14-N2557: Doppelte Attribute zulassen“ (PDF) . open-std.org . 1. September 2020. Archiviert (PDF) vom Original am 28. November 2022.
  48. ^ „WG14-N2418: Hinzufügen des u8-Zeichenpräfixes“ (PDF) . open-std.org . 2019-09-02. Archiviert (PDF) vom Original am 13. Januar 2023.
  49. ^ Was ist der Sinn der für C++17 vorgeschlagenen UTF-8-Zeichenliterale?; Stack Overflow.
  50. ^ „WG14-N2341: ISO/IEC TS 18661-2 – Gleitkomma-Erweiterungen für C – Teil 2: Dezimal-Gleitkommaarithmetik“ (PDF) . open-std.org . 26. Februar 2019. Archiviert (PDF) vom Original am 21. November 2022.
  51. ^ „WG14-N2601: Anhang X – IEC 60559 Austausch- und erweiterte Typen“ (PDF) . open-std.org . 15. Oktober 2020. Archiviert (PDF) vom Original am 14. Oktober 2022.
  52. ^ „WG14-N3018: Der constexpr-Spezifizierer für Objektdefinitionen“ . open-std.org . 06.07.2022. Archiviert vom Original am 24. Dezember 2022.
  53. ^ „WG14-N2653: char8_t: Ein Typ für UTF-8-Zeichen und -Zeichenketten (Revision 1)“ . open-std.org . 04.06.2021. Archiviert vom Original am 27.05.2023.
  54. ^ „WG14-N2728: char16_t- und char32_t-Zeichenkettenliterale müssen UTF-16- bzw. UTF-32-kodiert sein . “ open-std.org . 15.05.2021. Archiviert vom Original am 27.05.2023.
  55. ^ „WG14-N3038: Einführung von Speicherklassenspezifizierern für zusammengesetzte Literale“ . open-std.org . 21.07.2022. Archiviert vom Original am 26.11.2022.
  56. ^ a b c „WG14-N2630: Formatierte Ein-/Ausgabe von Binärzahlen“ (PDF) . open-std.org . 1. Januar 2021. Archiviert (PDF) vom Original am 14. Dezember 2022.
  57. ^ „WG14-N3020: Qualifier-preserving standard library functions“ (PDF) . open-std.org . 13.06.2022. Archiviert (PDF) vom Original am 13. Oktober 2022.
  58. ^ "WG14-N2897: memset_explicit()" . open-std.org . 2021-12-27. Archiviert vom Original am 25. Oktober 2022.
  59. ^ „WG14-N2349: Für ein effizienteres Kopieren und Verketten von Zeichenketten“ . open-std.org . 18.03.2019. Archiviert vom Original am 30.09.2022.
  60. ^ "WG14-N2353: strdup() und strndup()" . open-std.org . 18.03.2019. Archiviert vom Original am 24.12.2022.
  61. ^ „WG14-N2974: Queryable pointer alignment“ (PDF) . open-std.org . 15.04.2022. Archiviert (PDF) vom Original am 13. Oktober 2022.
  62. ^ "WG14-N2699: Sized Memory Deallocation" . open-std.org . 2021-03-24.{{cite web}}: CS1 maint: url-status ( link )
  63. ^ a b c d e f g h i j k "WG14-N3022: Moderne Bit-Dienstprogramme" . open-std.org . 06.07.2022. Archiviert vom Original am 24. Dezember 2022.
  64. ^ „WG14-N2833: Füge timegm() als nicht optionalen Bestandteil von time.h hinzu . “ open-std.org . 7. Oktober 2021. Archiviert vom Original am 1. Dezember 2021.
  65. ^ Eine hilfreiche Übersicht bietet N3096 ​​§ B.11. Die Funktionen wurden in separaten Dokumenten hinzugefügt: N2488, dessen aktualisierten Versionen und den dazugehörigen Referenzen.
  66. ^ „WG14-N2940: Trigraphen entfernen??!" (PDF) . open-std.org . 2022-03-02. Archiviert (PDF) vom Original am 26. Oktober 2022.
  67. ^ „WG14-N2432: Vorschlag zur Abschaffung der Unterstützung für Funktionsdefinitionen mit Bezeichnerlisten“ (PDF) . open-std.org . 25. September 2019. Archiviert (PDF) vom Original am 27. Dezember 2022.
  68. ^ „WG14-N2841: Keine Funktionsdeklaratoren ohne Prototypen“ . open-std.org . 10.10.2021. Archiviert vom Original am 12. November 2022.
  69. ^ „WG14-N2412: Zweierkomplement-Zeichendarstellung“ (PDF) . open-std.org . 11. August 2019. Archiviert (PDF) vom Original am 27. Dezember 2022.
  70. ^ „WG14-N2993: Make *_HAS_SUBNORM be obsolescent“ . open-std.org . 2022-06-06. Archiviert vom Original am 5. Dezember 2022.
  71. ^ „GCC 9 Versionshinweise“ . GNU-Projekt . Archiviert vom Original am 27. Dezember 2022.
  72. ^ „Clang 9.0 – Neuer Sprachmodus für C2x hinzugefügt“ . LLVM-Projekt-Repository . 14. Mai 2019. Archiviert vom Original am 27. Dezember 2022.
  73. ^ „Pelles C – größere Änderungen zwischen 10:00 und 11:00 Uhr“ . smorgasbordet.com . Archiviert vom Original am 27. Dezember 2022.
  74. ^ „GCC 15 Release Series“ . GNU-Projekt . Abgerufen am 13. Juli 2025 .
  75. ^ a b c "N3150 - Bericht des Herausgebers nach dem Treffen Januar-Februar 2023" . open-std.org . 2023-07-08.
  76. ^ a b c d "N3221 - Bericht des Herausgebers nach dem Treffen im Januar 2024" . open-std.org . 15.02.2024.

Weiterführende Literatur

  • ISO/IEC 9899:2024 (offizieller C23-Standard); ISO ; 2024. (verfügbar, aber kostenpflichtig)
  • N3096 ​​(letzter frei verfügbarer Arbeitsentwurf vor C23); WG14; April 2023. (kostenloser Download)
  • N3149 (Arbeitsentwurf des C23-Standards); WG14; Juli 2023. (Nicht öffentlich zugänglich)
  • N3219 ( ISO/IEC 9899:2023 DIS-Entwurf ); WG14; Februar 2024. (ISO-Entwurf verfügbar, aber kostenpflichtig)
  • N3220 (erster Arbeitsentwurf nach C23; weicht vom Entwurfsstandard N3219 nur in einer Fußnote ab); WG14; Februar 2024. (kostenloser Download)