Namensräume
Varianten
Aktionen

C23

Von cppreference.com
< c

ISO/IEC 9899:2024, auch bekannt als C23, ist die aktuelle Überarbeitung des C-Standards.

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

[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
  • 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
    • STDC FENV_ROUND
    • STDC FENV_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

[bearbeiten] Fehlerberichte

In C23 behobene Fehlerberichte (? Fehler)

[bearbeiten] Compiler-Unterstützung

[bearbeiten] C23 Kernsprachenfunktionen

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