C23
From cppreference.net
<
c
ISO/IEC 9899:2024 , también conocido como C23 , es la revisión actual del estándar C.
- El último borrador de trabajo de C23 (n3149, 2023-07-09, un archivo zip protegido con contraseña, ver n3150 ).
- El borrador de acceso público más cercano a C23 es el primer borrador de C2Y (n3220, 2024-02-22, que solo difiere de C23 en cambios editoriales, ver n3221 ).
|
Esta sección está incompleta
Razón: los cambios aceptados incluidos en el borrador final |
C23 actualiza la macro predefinida __STDC_VERSION__ a 202311L .
Contenidos |
Nuevas características del lenguaje
- Tipos de coma flotante decimal ( _Decimal32 , _Decimal64 , y _Decimal128 )
- Enteros de precisión de bits ( _BitInt )
- Constantes enteras binarias
-
u8constantes de carácter -
Cambio de tipo de
u8literales de cadena -
Separador de dígitos
' - Inicializador vacío = { }
-
Atributos
-
[[ deprecated ]] -
[[ fallthrough ]] -
[[ maybe_unused ]] -
[[ nodiscard ]] -
[[ noreturn ]] -
[[ reproducible ]] -
[[ unsequenced ]]
-
- Parámetros sin nombre en definiciones de función
- Calificaciones cvr idénticas para tipos de arreglo y sus tipos de elemento
- static_assert de un solo argumento
- alignas y alignof se convierten en palabras clave (pueden ser macros predefinidas por razones de compatibilidad)
- static_assert se convierte en palabra clave (puede ser una macro predefinida por razones de compatibilidad)
- thread_local se convierte en palabra clave (puede ser una macro predefinida por razones de compatibilidad)
-
Etiquetas
seguidas de declaraciones y
} - Constante nullptr y el tipo asociado nullptr_t
- true y false se convierten en palabras clave (pueden ser macros predefinidas por razones de compatibilidad)
- Nuevas directivas de preprocesador
-
Pragmas para dirección de redondeo
-
STDCFENV_ROUND -
STDCFENV_DEC_ROUND
-
Macros de prueba de características para funcionalidades opcionales
-
__STDC_IEC_60559_BFP__
- Indica que se admite la aritmética de punto flotante binario IEEE-754 y las funciones matemáticas requeridas.
- Esta macro reemplaza a __STDC_IEC_559__ .
-
__STDC_IEC_60559_DFP__
- Indica que se admite la aritmética de punto flotante decimal IEEE-754 y las funciones matemáticas requeridas.
-
__STDC_IEC_60559_COMPLEX__
- Indica que se admite la aritmética compleja IEEE-754 y las funciones matemáticas requeridas.
- Esta macro reemplaza a __STDC_IEC_559_COMPLEX__ .
Nuevas características de la biblioteca
Nuevos encabezados
Características de la biblioteca
-
Funciones matemáticas extendidas de punto flotante binario
-
Esta sección está incompleta
Motivo: Lista por determinar
-
-
Funciones matemáticas de punto flotante decimal
-
Variantes
d Npara funciones matemáticas de punto flotante existentes y nuevas - quantized N ()
- samequantumd N ()
- quantumd N ()
- llquantexpd N ()
- encodedecd N ()
- decodedecd N ()
- encodebind N ()
- decodebind N ()
-
Variantes
- Funciones de formato de punto flotante
-
Soporte de biblioteca para UTF-8
-
Alias de tipo
char8_t - mbrtoc8()
- c8rtomb()
- Alias de tipo atomic_char8_t
- Macro de prueba ATOMIC_CHAR8_T_LOCK_FREE
-
Alias de tipo
- memset_explicit()
-
Funciones POSIX
- memccpy()
- strdup()
- strndup()
- gmtime_r()
- localtime_r()
- Extensiones para strftime() y wcsftime()
-
Extensiones para las familias de funciones
fscanf()
y
fprintf()
-
Modificadores de longitud
w Nywf Npara [u]int N _t y [u]int_fast N _t respectivamente -
Modificadores de longitud
H,D, yDDpara _Decimal32 , _Decimal64 , y _Decimal128 respectivamente -
Especificador de conversión
bpara tipos enteros sin signo
-
Modificadores de longitud
- timespec_getres()
- Constantes macro para el ancho de tipos enteros
- Macros adicionales de límites numéricos para tipos de punto flotante
- Macros de prueba de versión de biblioteca
Características obsoletas
Características eliminadas
- Declaraciones de funciones al estilo antiguo y definiciones de funciones
- Representaciones para enteros con signo distintas al complemento a dos
- Permiso de que las constantes de carácter y literales de cadena con prefijo u / U puedan no ser UTF-16/32
- Concatenación mixta de literales de cadena anchos
- Soporte para llamar a realloc() con tamaño cero (el comportamiento se vuelve indefinido)
- alignas y alignof se proporcionan como macros definidas en <stdalign.h> (se convierten en palabras clave)
- static_assert se proporciona como una macro definida en <assert.h> (se convierte en palabra clave)
- thread_local se proporciona como una macro definida en <threads.h> (se convierte en palabra clave)
Características obsoletas
- <stdnoreturn.h>
- <stdalign.h>
- <stdbool.h>
- Macros de prueba de características antiguas
- _Noreturn especificador de función
- _Noreturn token de atributo
- asctime()
- ctime()
- DECIMAL_DIG (utilice la macro específica del tipo apropiada en su lugar ( FLT_DECIMAL_DIG , etc))
- Definición de las siguientes macros de límites numéricos en <math.h> (deben usarse mediante <float.h> )
- __bool_true_false_are_defined
Informes de defectos
| Informes de Defectos corregidos en C23 (? defectos) |
|---|
Soporte del compilador
Características principales del lenguaje C23
|
Esta sección está incompleta
Razón: estado para Apple Clang y otros compiladores que admiten C2x |
|
Característica de C23
|
Documento(s)
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| static_assert sin mensaje | N2265 | 9 | 9 | Sí | Sí | 6.5 | 2021.1.2 (clang based) | ||||
[[
nodiscard
]]
|
N2267 | 10 | 9 | Sí | 6.4 | 2021.1.2 (clang based) | |||||
[[
maybe_unused
]]
|
N2270 | 10 | 9 | Sí | 6.4 | 2021.1.2 (clang based) | |||||
[[
deprecated
]]
|
N2334 | 10 | 9 | Sí | 6.4 | 2021.1.2 (clang based) | |||||
| Atributos |
N2335
N2554 |
10 | 9 | Sí | 6.4 | 2021.1.2 (clang based) | |||||
| Tipos de coma flotante decimal IEEE 754 | N2341 |
4.2
(parcial)*
12 |
13.0 (parcial)* | ||||||||
[[
fallthrough
]]
|
N2408 | 10 | 9 | Sí | 6.4 | 2021.1.2 (clang based) | |||||
u8
constantes de carácter
|
N2418 | 10 | 15 | 6.5 | 2022.2 | ||||||
| Eliminación de function definitions sin prototipo | N2432 | 10 | 15 | 2022.2 | |||||||
[[
nodiscard
]]
con mensaje
|
N2448 | 11 | 10 | Sí | 6.4 | 2021.1.2 (clang based) | |||||
| Parámetros sin nombre en definiciones de funciones | N2480 | 11 | 11 | Sí | 6.4 | 2021.1.2 (clang based) | |||||
| Etiquetas antes de declaraciones y final de bloques | N2508 | 11 | 16 | Parcial* | 6.5 | 17.0 * | |||||
| Constantes enteras binarias | N2549 |
4.3
*
11 |
2.9
*
9 |
19.0 (2015)* * | Sí | 6.5 | 11.0 * | ||||
| __has_c_attribute en condicionales del preprocesador | N2553 | 11 | 9 | Sí | 6.5 | 2021.1.2 (clang based) | |||||
| Permitir atributos duplicados | N2557 | 11 | 13 | Sí | 6.5 | 2021.4 (basado en clang | |||||
| Tipos de intercambio y extendidos IEEE 754 | N2601 |
7
(parcial)*
14 |
6 (parcial)* | Parcial* | |||||||
| Separadores de dígitos | N2626 | 12 | 13 | 19.0 (2015)* * | Sí | 6.5 | 18.0 * | ||||
#elifdef
y
#elifndef
|
N2645 | 12 | 13 | 19.40* | 13.1.6* | 6.5 | 2021.4 | ||||
Cambio de tipo de
u8
literales de cadena
|
N2653 | 13 | |||||||||
[[
maybe_unused
]]
para etiquetas
|
N2662 | 11 | 16 | 6.5 | 2022.2 | ||||||
| #warning | N2686 | Sí | Sí | Sí | 6.5 | Sí | |||||
| Tipos enteros de precisión de bits ( _BitInt ) | N2763 | 14 (parcial)* | 15 | 6.5 | 2022.2 | ||||||
[[
noreturn
]]
|
N2764 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Sufijos para constantes enteras de precisión de bits | N2775 | 14 | 15 | 2022.2 | |||||||
| __has_include en condicionales del preprocesador | N2799 | 5 | Sí | 19.11* | Sí | 6.5 | 18.0 | ||||
| Sintaxis de Identificadores usando el Anexo 31 del Estándar Unicode | N2836 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Eliminación de declaraciones de función sin prototipo | N2841 | 13 | 15 | 2022.2 | |||||||
| Inicializadores vacíos | N2900 |
Parcial*
13 |
Parcial* | Parcial* | Parcial* | Parcial* | |||||
| typeof y typeof_unqual |
N2927
N2930 |
Parcial*
13 |
Parcial*
16 |
19.39* | Parcial* | Parcial* | Parcial* | Parcial* | |||
| Nueva ortografía de palabras clave | N2934 | 13 | 16 | 6.5 | |||||||
| Predefinidos true y false | N2935 | 13 | 15 | 2022.2 | |||||||
[[
unsequenced
]]
y
[[
reproducible
]]
|
N2956 | 15 | |||||||||
| Relajar requisitos para lista de parámetros variádicos | N2975 | 13 | 16 | 6.5 | 2023.1 | ||||||
| Inferencia de tipos en definiciones de objetos | N3007 | 13 | 18 | ||||||||
| #embed | N3017 | 15 | 19 | ||||||||
| constexpr objetos | N3018 | 13 | 19 | ||||||||
| Enumeraciones Normales Mejoradas | N3029 | 13 | 20 * | ||||||||
| Enumeraciones con tipos subyacentes fijos | N3030 | 13 | 20 * | ||||||||
__VA_OPT__
|
N3033 |
8
13 |
12 | 19.39* | 6.5 | ||||||
| Especificadores de clase de almacenamiento para literales compuestos | N3038 | 13 | |||||||||
| nullptr | N3042 | 13 | 16 | ||||||||
|
Característica de C23 |
Documento(s) |
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
Características de la biblioteca C23
|
Esta sección está incompleta
Motivo: una lista diferente para las bibliotecas estándar de C |