C23
From cppreference.net
<
c
ISO/IEC 9899:2024 , également appelé C23 , est la révision actuelle de la norme C.
- La dernière version de travail du C23 (n3149, 2023-07-09, une archive zip protégée par mot de passe, voir n3150 ).
- L'ébauche accessible publiquement la plus proche du C23 est la première ébauche C2Y (n3220, 2024-02-22, qui ne diffère du C23 que par des modifications éditoriales, voir n3221 ).
|
Cette section est incomplète
Raison : modifications acceptées incluses dans le projet final |
C23 augmente la macro prédéfinie __STDC_VERSION__ à 202311L .
Table des matières |
Nouvelles fonctionnalités du langage
- Types à virgule flottante décimale ( _Decimal32 , _Decimal64 , et _Decimal128 )
- Entiers à précision de bits ( _BitInt )
- Constantes entières binaires
-
u8constantes de caractère -
Changement de type des
u8littéraux de chaîne -
Séparateur de chiffres
' - Initialiseur vide = { }
-
Attributs
-
[[ deprecated ]] -
[[ fallthrough ]] -
[[ maybe_unused ]] -
[[ nodiscard ]] -
[[ noreturn ]] -
[[ reproducible ]] -
[[ unsequenced ]]
-
- Paramètres sans nom dans les définitions de fonction
- Qualifications cvr identiques pour les types tableau et leurs types d'éléments
- static_assert à argument unique
- alignas et alignof deviennent des mots-clés (peuvent être des macros prédéfinies pour des raisons de compatibilité)
- static_assert devient un mot-clé (peut être une macro prédéfinie pour des raisons de compatibilité)
- thread_local devient un mot-clé (peut être une macro prédéfinie pour des raisons de compatibilité)
-
Étiquettes
suivies de déclarations et
} - Constante nullptr et type associé nullptr_t
- true et false deviennent des mots-clés (peuvent être des macros prédéfinies pour des raisons de compatibilité)
- Nouvelles directives de préprocesseur
-
Pragmas pour la direction d'arrondi
-
STDCFENV_ROUND -
STDCFENV_DEC_ROUND
-
Macros de test de fonctionnalités pour les fonctionnalités optionnelles
-
__STDC_IEC_60559_BFP__
- Indique que l'arithmétique binaire en virgule flottante IEEE-754 et les fonctions mathématiques requises sont prises en charge.
- Cette macro remplace __STDC_IEC_559__ .
-
__STDC_IEC_60559_DFP__
- Indique que l'arithmétique décimale en virgule flottante IEEE-754 et les fonctions mathématiques requises sont prises en charge.
-
__STDC_IEC_60559_COMPLEX__
- Indique que l'arithmétique complexe IEEE-754 et les fonctions mathématiques requises sont prises en charge.
- Cette macro remplace __STDC_IEC_559_COMPLEX__ .
Nouvelles fonctionnalités de la bibliothèque
Nouveaux en-têtes
Fonctionnalités de la bibliothèque
-
Fonctions mathématiques étendues en virgule flottante binaire
-
Cette section est incomplète
Raison : Liste à déterminer
-
-
Fonctions mathématiques en virgule flottante décimale
-
-
d Nvariantes pour les fonctions mathématiques en virgule flottante existantes et nouvelles - quantized N ()
- samequantumd N ()
- quantumd N ()
- llquantexpd N ()
- encodedecd N ()
- decodedecd N ()
- encodebind N ()
- decodebind N ()
-
-
- Fonctions de formatage en virgule flottante
-
Support de bibliothèque pour UTF-8
-
char8_talias de type - mbrtoc8()
- c8rtomb()
- atomic_char8_t alias de type
- ATOMIC_CHAR8_T_LOCK_FREE macro de test
-
- memset_explicit()
-
Fonctions POSIX
- memccpy()
- strdup()
- strndup()
- gmtime_r()
- localtime_r()
- Extensions pour strftime() et wcsftime()
-
Extensions pour les familles de fonctions
fscanf()
et
fprintf()
-
w Netwf Nmodificateurs de longueur pour [u]int N _t et [u]int_fast N _t respectivement -
H,D, etDDmodificateurs de longueur pour _Decimal32 , _Decimal64 , et _Decimal128 respectivement -
bspécificateur de conversion pour les types entiers non signés
-
- timespec_getres()
- Constantes de macro pour la largeur des types entiers
- Macros de limites numériques supplémentaires pour les types en virgule flottante
- Macros de test de version de bibliothèque
Fonctionnalités obsolètes
Fonctionnalités supprimées
- Déclarations de fonctions à l'ancienne et définitions de fonctions
- Représentations des entiers signés autres que le complément à deux
- Permission que les u / U -préfixés constantes de caractère et littéraux de chaîne puissent ne pas être UTF-16/32
- Concatenation mixte de littéraux de chaîne larges
- Support pour l'appel de realloc() avec une taille nulle (le comportement devient indéfini)
- alignas et alignof sont fournis comme macros définies dans <stdalign.h> (deviennent des mots-clés)
- static_assert est fourni comme macro définie dans <assert.h> (devient un mot-clé)
- thread_local est fourni comme macro définie dans <threads.h> (devient un mot-clé)
Fonctionnalités dépréciées
- <stdnoreturn.h>
- <stdalign.h>
- <stdbool.h>
- Anciennes macros de test de fonctionnalités
- _Noreturn spécificateur de fonction
- _Noreturn jeton d'attribut
- asctime()
- ctime()
- DECIMAL_DIG (utiliser plutôt la macro spécifique au type appropriée ( FLT_DECIMAL_DIG , etc))
- Définition des macros de limites numériques suivantes dans <math.h> (elles devraient être utilisées via <float.h> )
- __bool_true_false_are_defined
Rapports de défauts
| Rapports de défauts corrigés dans C23 (? défauts) |
|---|
Support du compilateur
Fonctionnalités principales du langage C23
|
Cette section est incomplète
Raison : statut pour Apple Clang et autres compilateurs prenant en charge C2x |
|
Fonctionnalité C23
|
Document(s)
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| static_assert sans message | N2265 | 9 | 9 | Oui | Oui | 6.5 | 2021.1.2 (clang based) | ||||
[[
nodiscard
]]
|
N2267 | 10 | 9 | Oui | 6.4 | 2021.1.2 (clang based) | |||||
[[
maybe_unused
]]
|
N2270 | 10 | 9 | Oui | 6.4 | 2021.1.2 (clang based) | |||||
[[
deprecated
]]
|
N2334 | 10 | 9 | Oui | 6.4 | 2021.1.2 (clang based) | |||||
| Attributs |
N2335
N2554 |
10 | 9 | Oui | 6.4 | 2021.1.2 (clang based) | |||||
| Types de virgule flottante décimale IEEE 754 | N2341 |
4.2
(partiel)*
12 |
13.0 (partiel)* | ||||||||
[[
fallthrough
]]
|
N2408 | 10 | 9 | Oui | 6.4 | 2021.1.2 (clang based) | |||||
u8
constantes de caractère
|
N2418 | 10 | 15 | 6.5 | 2022.2 | ||||||
| Suppression des définitions de fonction sans prototype | N2432 | 10 | 15 | 2022.2 | |||||||
[[
nodiscard
]]
avec message
|
N2448 | 11 | 10 | Oui | 6.4 | 2021.1.2 (clang based) | |||||
| Paramètres non nommés dans les définitions de fonction | N2480 | 11 | 11 | Oui | 6.4 | 2021.1.2 (clang based) | |||||
| Étiquettes avant les déclarations et fin des blocs | N2508 | 11 | 16 | Partiel* | 6.5 | 17.0 * | |||||
| Constantes entières binaires | N2549 |
4.3
*
11 |
2.9
*
9 |
19.0 (2015)* * | Oui | 6.5 | 11.0 * | ||||
| __has_c_attribute dans les conditionnelles du préprocesseur | N2553 | 11 | 9 | Oui | 6.5 | 2021.1.2 (clang based) | |||||
| Autoriser les attributs en double | N2557 | 11 | 13 | Oui | 6.5 | 2021.4 (clang-based | |||||
| Types d'échange et étendus IEEE 754 | N2601 |
7
(partiel)*
14 |
6 (partiel)* | Partiel* | |||||||
| Séparateurs de chiffres | N2626 | 12 | 13 | 19.0 (2015)* * | Oui | 6.5 | 18.0 * | ||||
#elifdef
et
#elifndef
|
N2645 | 12 | 13 | 19.40* | 13.1.6* | 6.5 | 2021.4 | ||||
Changement de type des
u8
littéraux de chaîne
|
N2653 | 13 | |||||||||
[[
maybe_unused
]]
pour les étiquettes
|
N2662 | 11 | 16 | 6.5 | 2022.2 | ||||||
| #warning | N2686 | Oui | Oui | Oui | 6.5 | Oui | |||||
| Types entiers à précision de bits ( _BitInt ) | N2763 | 14 (partiel)* | 15 | 6.5 | 2022.2 | ||||||
[[
noreturn
]]
|
N2764 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Suffixes pour les constantes entières à précision de bits | N2775 | 14 | 15 | 2022.2 | |||||||
| __has_include dans les conditionnelles du préprocesseur | N2799 | 5 | Oui | 19.11* | Oui | 6.5 | 18.0 | ||||
| Syntaxe des identifiants utilisant la norme Unicode Annexe 31 | N2836 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Suppression des déclarations de fonction sans prototype | N2841 | 13 | 15 | 2022.2 | |||||||
| Initialiseurs vides | N2900 |
Partiel*
13 |
Partiel* | Partiel* | Partiel* | Partiel* | |||||
| typeof et typeof_unqual |
N2927
N2930 |
Partiel*
13 |
Partiel*
16 |
19.39* | Partiel* | Partiel* | Partiel* | Partiel* | |||
| Nouvelle orthographe des mots-clés | N2934 | 13 | 16 | 6.5 | |||||||
| Prédéfinis true et false | N2935 | 13 | 15 | 2022.2 | |||||||
[[
unsequenced
]]
et
[[
reproducible
]]
|
N2956 | 15 | |||||||||
| Assouplir les exigences pour la liste de paramètres variadiques | N2975 | 13 | 16 | 6.5 | 2023.1 | ||||||
| Inférence de type dans les définitions d'objets | N3007 | 13 | 18 | ||||||||
| #embed | N3017 | 15 | 19 | ||||||||
| constexpr objets | N3018 | 13 | 19 | ||||||||
| Énumérations Normales Améliorées | N3029 | 13 | 20 * | ||||||||
| Énumérations avec types sous-jacents fixes | N3030 | 13 | 20 * | ||||||||
__VA_OPT__
|
N3033 |
8
13 |
12 | 19.39* | 6.5 | ||||||
| Spécificateurs de classe de stockage pour les littéraux composés | N3038 | 13 | |||||||||
| nullptr | N3042 | 13 | 16 | ||||||||
|
Fonctionnalité C23 |
Document(s) |
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
Fonctionnalités de la bibliothèque C23
|
Cette section est incomplète
Raison : une liste différente pour les bibliothèques standard C |