C23
Von cppreference.com
< c
ISO/IEC 9899:2024, auch bekannt als C23, ist die aktuelle Überarbeitung des C-Standards.
- Die neueste öffentlich verfügbare WD von C23 (n3467, 09.02.2025).
- Die neueste WD von C23 (n3149, 09.07.2023, ein passwortgeschütztes Zip-Archiv, siehe n3150).
| Dieser Abschnitt ist unvollständig Grund: Akzeptierte Änderungen, die in den endgültigen Entwurf aufgenommen wurden |
C23 erhöht das vordefinierte Makro __STDC_VERSION__ auf 202311L.
Inhalt |
[bearbeiten] Veraltete Funktionen
[bearbeiten] Entfernte Funktionen
- Alte Funktionsdeklarationen und Funktionsdefinitionen
- Darstellungen für vorzeichenbehaftete Ganzzahltypen außer Zweierkomplement
- Erlaubnis, dass `u`/`U`-präfixierte Zeichenkonstanten und String-Literale möglicherweise nicht UTF-16/32 sind
- Gemischte String-Literal-Konkatenation
- Unterstützung für den Aufruf von realloc() mit Größe Null (das Verhalten wird undefiniert)
- __alignof_is_defined und __alignas_is_defined
- static_assert wird nicht als Makro in <assert.h> bereitgestellt (wird zum Schlüsselwort)
- thread_local wird nicht als Makro in <threads.h> bereitgestellt (wird zum Schlüsselwort)
[bearbeiten] Veraltete Funktionen
- <stdnoreturn.h>
- Alte Feature-Test-Makros
- _Noreturn Funktionsspezifizierer
- _Noreturn Attribut-Token
- asctime()
- ctime()
- DECIMAL_DIG (verwenden Sie stattdessen das entsprechende typspezifische Makro (FLT_DECIMAL_DIG, etc.))
- Definition der folgenden numerischen Grenzwert-Makros in <math.h> (sie sollten über <float.h> verwendet werden)
- __bool_true_false_are_defined
[bearbeiten] Neue Sprachenfunktionen
- Dezimale Gleitkommatypen (_Decimal32, _Decimal64 und _Decimal128)
- Bitgenaue Ganzzahltypen (_BitInt)
- Binäre Ganzzahlkonstanten
-
u8-Zeichenkonstanten - Typänderung von
u8-String-Literalen - Zifferntrennzeichen
' - Leerer Initialisierer ={}
- Attribute
-
[[deprecated]] -
[[fallthrough]] -
[[maybe_unused]] -
[[nodiscard]] -
[[noreturn]] -
[[reproducible]] -
[[unsequenced]]
-
- Unbenannte Parameter in Funktionsdefinitionen
- Identische cvr-Qualifizierungen für Array-Typen und deren Elementtypen
- Ein-Argument _Static_assert
- static_assert wird zum Schlüsselwort (kann aus Kompatibilitätsgründen ein vordefiniertes Makro sein)
- thread_local wird zum Schlüsselwort (kann aus Kompatibilitätsgründen ein vordefiniertes Makro sein)
- Labels gefolgt von Deklarationen und
} - nullptr-Konstante und der zugehörige nullptr_t-Typ
- true und false werden zu Schlüsselwörtern (können aus Kompatibilitätsgründen vordefinierte Makros sein)
- Neue Präprozessor-Direktiven
- Pragmas für Rundungsrichtung
-
STDCFENV_ROUND -
STDCFENV_DEC_ROUND
-
[bearbeiten] Feature-Test-Makros für optionale Funktionen
- __STDC_IEC_60559_BFP__
- Gibt an, dass IEEE-754 binäre Gleitkomma-Arithmetik und erforderliche mathematische Funktionen unterstützt werden.
- Dieses Makro ersetzt __STDC_IEC_559__.
- __STDC_IEC_60559_DFP__
- Gibt an, dass IEEE-754 dezimale Gleitkomma-Arithmetik und erforderliche mathematische Funktionen unterstützt werden.
- __STDC_IEC_60559_COMPLEX__
- Gibt an, dass IEEE-754 komplexe Arithmetik und erforderliche mathematische Funktionen unterstützt werden.
- Dieses Makro ersetzt __STDC_IEC_559_COMPLEX__.
[bearbeiten] Neue Bibliotheksfunktionen
[bearbeiten] Neue Header
[bearbeiten] Bibliotheksfunktionen
- Erweiterte binäre Gleitkomma-Mathematikfunktionen
-
Dieser Abschnitt ist unvollständig
Grund: Liste TBD
-
- Dezimale Gleitkomma-Mathematikfunktionen
- -`dN`-Varianten für bestehende und neue Gleitkomma-Mathematikfunktionen
- quantizedN()
- samequantumdN()
- quantumdN()
- llquantexpdN()
- encodedecdN()
- decodedecdN()
- encodebindN()
- decodebindN()
- Gleitkomma-Formatierungsfunktionen
- Bibliotheksunterstützung für UTF-8
- memset_explicit()
- POSIX-Funktionen
- memccpy()
- strdup()
- strndup()
- gmtime_r()
- localtime_r()
- Erweiterungen für strftime() und wcsftime()
- Erweiterungen für die Funktionsfamilien fscanf() und fprintf()
- `wN`- und `wfN`-Längenmodifikatoren für [u]intN_t bzw. [u]int_fastN_t
- `H`-, `D`- und `DD`-Längenmodifikatoren für _Decimal32, _Decimal64 bzw. _Decimal128
- `b`-Konvertierungsspezifizierer für vorzeichenlose Ganzzahltypen
- timespec_getres()
- Makrokonstanten für die Breite von Ganzzahltypen
- Zusätzliche numerische Grenzwert-Makros für Gleitkommatypen
- Bibliotheks-Versions-Test-Makros
[bearbeiten] Fehlerberichte
| In C23 behobene Fehlerberichte (? Fehler) |
|---|
[bearbeiten] Compiler-Unterstützung
[bearbeiten] C23 Kernsprachenfunktionen
| Dieser Abschnitt ist unvollständig Grund: Status für Apple Clang und andere Compiler, die C2x unterstützen |
| C23-Funktion |
Papier(e) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ehem. PGI)* |
Nvidia nvcc |
Cray |
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| static_assert ohne Meldung | N2265 | 9 | 9 | Ja | Ja | 6.5 | 2021.1.2 (clang-basiert) | ||||
[[nodiscard]]
|
N2267 | 10 | 9 | Ja | 6.4 | 2021.1.2 (clang-basiert) | |||||
[[maybe_unused]]
|
N2270 | 10 | 9 | Ja | 6.4 | 2021.1.2 (clang-basiert) | |||||
[[deprecated]]
|
N2334 | 10 | 9 | Ja | 6.4 | 2021.1.2 (clang-basiert) | |||||
| Attribute | N2335 N2554 |
10 | 9 | Ja | 6.4 | 2021.1.2 (clang-basiert) | |||||
| IEEE 754 dezimale Gleitkommatypen | N2341 | 4.2 (teilweise)* 12 |
13.0 (teilweise)* | ||||||||
[[fallthrough]]
|
N2408 | 10 | 9 | Ja | 6.4 | 2021.1.2 (clang-basiert) | |||||
u8-Zeichenkonstanten
|
N2418 | 10 | 15 | 6.5 | 2022.2 | ||||||
| Entfernung von Funktionsdefinitionen ohne Prototyp | N2432 | 10 | 15 | 2022.2 | |||||||
[[nodiscard]] mit Meldung |
N2448 | 11 | 10 | Ja | 6.4 | 2021.1.2 (clang-basiert) | |||||
| Unbenannte Parameter in Funktionsdefinitionen | N2480 | 11 | 11 | Ja | 6.4 | 2021.1.2 (clang-basiert) | |||||
| Labels vor Deklarationen und Ende von Blöcken | N2508 | 11 | 16 | Teilweise* | 6.5 | 17.0* | |||||
| Binäre Ganzzahlkonstanten | N2549 | 4.3* 11 |
2.9* 9 |
19.0 (2015)** | Ja | 6.5 | 11.0* | ||||
| __has_c_attribute in Präprozessor-Konditionalen | N2553 | 11 | 9 | Ja | 6.5 | 2021.1.2 (clang-basiert) | |||||
| Zulassen doppelter Attribute | N2557 | 11 | 13 | Ja | 6.5 | 2021.4 (clang-basiert | |||||
| IEEE 754 Interchange- und erweiterte Typen | N2601 | 7 (teilweise)* 14 |
6 (teilweise)* | Teilweise* | |||||||
| Zifferntrenner | N2626 | 12 | 13 | 19.0 (2015)** | Ja | 6.5 | 18.0* | ||||
#elifdef und #elifndef
|
N2645 | 12 | 13 | 19.40* | 13.1.6* | 6.5 | 2021.4 | ||||
Typänderung von u8-String-Literalen |
N2653 | 13 | |||||||||
[[maybe_unused]] für Labels |
N2662 | 11 | 16 | 6.5 | 2022.2 | ||||||
| #warning | N2686 | Ja | Ja | Ja | 6.5 | Ja | |||||
| Bitgenaue Ganzzahltypen (_BitInt) | N2763 | 14 (teilweise)* | 15 | 6.5 | 2022.2 | ||||||
[[noreturn]]
|
N2764 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Suffixe für bitgenaue Ganzzahlkonstanten | N2775 | 14 | 15 | 2022.2 | |||||||
| __has_include in Präprozessor-Konditionalen | N2799 | 5 | Ja | 19.11* | Ja | 6.5 | 18.0 | ||||
| Identifier-Syntax unter Verwendung von Unicode Standard Annex 31 | N2836 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Entfernung von Funktionsdeklarationen ohne Prototyp | N2841 | 13 | 15 | 2022.2 | |||||||
| Leere Initialisierer | N2900 | Teilweise* 13 |
Teilweise* | Teilweise* | Teilweise* | Teilweise* | |||||
| typeof und typeof_unqual | N2927 N2930 |
Teilweise* 13 |
Teilweise* 16 |
19.39* | Teilweise* | Teilweise* | Teilweise* | Teilweise* | |||
| Neue Schreibweise von Schlüsselwörtern | N2934 | 13 | 16 | 6.5 | |||||||
| Vordefinierte true und false Boolesche Konstanten | N2935 | 13 | 15 | 2022.2 | |||||||
[[unsequenced]] und [[reproducible]] |
N2956 | 15 | |||||||||
| Gelockerte Anforderungen für variablen Parameterlisten | N2975 | 13 | 16 | 6.5 | 2023.1 | ||||||
| Typinferenz bei Objektdefinitionen | N3007 | 13 | 18 | ||||||||
| #embed | N3017 | 15 | 19 | ||||||||
| constexpr-Objekte | N3018 | 13 | 19 | ||||||||
| Verbesserte Standard-Enumerationen | N3029 | 13 | 20* | ||||||||
| Enumerationen mit festen zugrunde liegenden Typen | N3030 | 13 | 20* | ||||||||
__VA_OPT__
|
N3033 | 8 13 |
12 | 19.39* | 6.5 | ||||||
| Speicherklassen-Spezifizierer für zusammengesetzte Literale | N3038 | 13 | |||||||||
| nullptr | N3042 | 13 | 16 | ||||||||
| C23-Funktion |
Papier(e) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ehem. PGI)* |
Nvidia nvcc |
Cray |
[bearbeiten] C23 Bibliotheksfunktionen
| Dieser Abschnitt ist unvollständig Grund: Eine andere Liste für C-Standardbibliotheken |