C23
Материал из cppreference.com
< c
ISO/IEC 9899:2024, также известный как C23, это текущая версия стандарта языка C.
См.: Текущий рабочий черновик C23.
| Этот раздел не завершён Причина: принятые изменения ещё не включены в рабочий черновик |
Устарело
Удалено
- Старый стиль объявлений и определений функций
- Представления знаковых целых, отличные от дополнения до двух
- Разрешение, что символьные константы с префиксами
u/Uи строковые литералы могут быть не UTF-16/32 - Смешанная конкатенация широких строковых литералов
- Поддержка вызова realloc() с нулевым размером (поведение становится неопределённым)
- __alignof_is_defined и __alignas_is_defined
- static_assert не предоставляется в качестве макроса, определённого в <assert.h> (становится ключевым словом)
- thread_local не предоставляется в качестве макроса, определённого в <threads.h> (становится ключевым словом)
Не рекомендовано
- <stdnoreturn.h>
- Старые макросы проверки возможностей
- Спецификатор функции _Noreturn
- Токен атрибута _Noreturn
- asctime()
- ctime()
- DECIMAL_DIG (вместо этого использовать соответствующий специфичный для типа макрос (FLT_DECIMAL_DIG, и т. д.))
- Определения следующих макросов границ в <math.h> (они должны использоваться с помощью <float.h>)
- __bool_true_false_are_defined
Новые возможности языка
- Десятичные типы с плавающей точкой (_Decimal32, _Decimal64 и _Decimal128)
- Точные битовые целые (_BitInt(N))
- Двоичные целые константы
- Cимвольные константы
u8 - Изменение типа строковых литералов
u8 - Разделитель цифр
' - Пустой инициализатор
= {} - Атрибуты
[[deprecated]][[fallthrough]][[maybe_unused]][[nodiscard]][[noreturn]][[reproducible]][[unsequenced]]
- Безымянные параметры в определениях функций
- Идентичные cvr-квалификаторы для типов массивов и типов их элементов
- _Static_assert с одним аргументом
- static_assert становится ключевым словом (для целей совместимости может быть предопределённым макросом)
- thread_local становится ключевым словом (для целей совместимости может быть предопределённым макросом)
- Метки перед объявлениями и
} - Константа nullptr и связанные тип nullptr_t
- true и false становятся ключевыми словоми (для целей совместимости могут быть предопределёнными макросами)
- Новые директивы препроцессора
- Параметры pragma для направления округления
STDCFENV_ROUNDSTDCFENV_DEC_ROUND
Макросы проверки возможности для опциональных возможностей
- __STDC_IEC_60559_BFP__
- Указывает, что поддерживаются двоичная арифметика с плавающей точкой IEEE-754 и требуемые математические функции.
- Этот макрос заменяет __STDC_IEC_559__.
- __STDC_IEC_60559_DFP__
- Указывает, что поддерживаются десятичная арифметика с плавающей точкой IEEE-754 и требуемые математические функции.
- __STDC_IEC_60559_COMPLEX__
- Указывает, что поддерживаются комплексная арифметика с плавающей точкой IEEE-754 и требуемые математические функции.
- Этот макрос заменяет __STDC_IEC_559_COMPLEX__.
Новые возможности библиотек
Новые заголовочные файлы
Возможности библиотек
- Расширенные двоичные математические функции с плавающей точкой
Этот раздел не завершён
Причина: Указать список
- Десятичные математические функции с плавающей точкой
- -
dN-варианты для существующих и новые математические функции с плавающей точкой - quantizedN()
- samequantumdN()
- quantumdN()
- llquantexpdN()
- encodedecdN()
- decodedecdN()
- encodebindN()
- decodebindN()
- -
- Функции форматирования с плавающей точкой
- Поддержка библиотекой UTF-8
- Псевдоним типа
char8_t - mbrtoc8()
- c8rtomb()
- Псевдоним типа atomic_char8_t
- Проверяющий макрос ATOMIC_CHAR8_T_LOCK_FREE
- Псевдоним типа
- memset_explicit()
- Функции POSIX
- memccpy()
- strdup()
- strndup()
- gmtime_r()
- localtime_r()
- Расширения для strftime() и wcsftime()
- Расширения для семейств функций fscanf() и fprintf()
- Модификаторы размера
wNиwfNдля [u]intN_t и [u]int_fastN_t соответственно - Модификаторы размера
H,DиDDдля_Decimal32,_Decimal64и_Decimal128соответственно - Спецификатор преобразования
bдля беззнаковых целых типов
- Модификаторы размера
- timespec_getres()
- Константы-макросы для размера целых типов
- Дополнительные макросы числовых границ для типов с плавающей точкой
- Макросы проверки версии библиотеки
Отчёты об ошибках
| Отчёты об ошибках, исправленные в C23 (? ошибок) |
|---|
Поддержка компиляторами
Базовые возможности ядра C23
| Этот раздел не завершён Причина: статус Apple Clang и других компиляторов, поддерживающих C2x |
| Возможность C23 |
Статья(и) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XL C++ |
IBM Open XL C++ для AIX |
IBM Open XL C++ для z/OS |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ (бывшая PGI)* |
Nvidia nvcc |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| _Static_assert без сообщения | N2265 | 9 | 9 | Да | ||||||||||||
[[nodiscard]]
|
N2267 | 10 | 9 | Да | 6.4 | |||||||||||
[[maybe_unused]]
|
N2270 | 10 | 9 | Да | 6.4 | |||||||||||
[[deprecated]]
|
N2334 | 10 | 9 | Да | 6.4 | |||||||||||
| Атрибуты | N2335 N2554 |
10 | 9 | Да | 6.4 | |||||||||||
| Десятичные типы с плавающей точкой IEEE 754 | N2341 | 4.2 (частично)* | 13.0 (частично)* | |||||||||||||
[[fallthrough]]
|
N2408 | 10 | 9 | Да | 6.4 | |||||||||||
Символьные константы u8
|
N2418 | 10 | 15 | |||||||||||||
| Удаление определений функций без прототипа | N2432 | 10 | 15 | |||||||||||||
[[nodiscard]] с сообщением
|
N2448 | 11 | 10 | Да | 6.4 | |||||||||||
| Безымянные параметры в определениях функций | N2480 | 11 | 11 | Да | 6.4 | |||||||||||
| Метки перед объявлениями и в конце блоков | N2508 | 11 | 16 | Частично* | 17.0* | |||||||||||
| Двоичные целые константы | N2549 | 4.3* 11 |
2.9* 9 |
19.0 (2015)** | Да | 11.0* | ||||||||||
| __has_c_attribute в условиях препроцессора | N2553 | 11 | 9 | Да | ||||||||||||
| Разрешение дубликатов атрибутов | N2557 | 11 | 13 | Да | ||||||||||||
| Обменные и расширенные типы IEEE 754 | N2601 | 7 (частично)* | 6 (частично)* | Частично* | ||||||||||||
| Цифровые разделители | N2626 | 12 | 13 | 19.0 (2015)** | Да | 18.0* | ||||||||||
#elifdef и #elifndef
|
N2645 | 12 | 13 |
13.1.6* |
||||||||||||
Смена типа строковых литералов u8
|
N2653 | |||||||||||||||
[[maybe_unused]] для меток
|
N2662 | 11 | 16 | |||||||||||||
| #warning | N2686 | Да | Да | Да | Да | |||||||||||
Точные битовые целые типы (_BitInt)
|
N2763 | 15 | ||||||||||||||
[[noreturn]]
|
N2764 | 13 | 15 | |||||||||||||
| Суффиксы для точных битовых целых констант | N2775 | 15 | ||||||||||||||
| __has_include в условиях препроцессора | N2799 | 5 | Да | 19.11* | Да | 18.0 | ||||||||||
| Синтаксис идентификаторов с использованием стандарта Unicode приложение 31 | N2836 | 13 | 15 | |||||||||||||
| Удаление объявлений функций без прототипа | N2841 | 13 | 15 |
| ||||||||||||
| Пустые инициализаторы | N2900 | Частично* | Частично* | Частично* | Частично* | Частично* |
| |||||||||
| typeof и typeof_unqual | N2927 N2930 |
Частично* 13 |
Частично* 16 |
Частично* | Частично* | Частично* | Частично* | |||||||||
| Новое написание ключевых слов | N2934 | 13 | 16 | |||||||||||||
Предопределённые true и false
|
N2935 | 13 | 15 | |||||||||||||
[[unsequenced]] и [[reproducible]]
|
N2956 | |||||||||||||||
| Ослабленные требования для списка с переменным количеством аргументов | N2975 | 13 | 16 | |||||||||||||
| Вывод типа в определении объекта | N3007 | 13 | ||||||||||||||
| #embed | N3017 | |||||||||||||||
| Объекты constexpr | N3018 | 13 | ||||||||||||||
| Улучшенные нормальные перечисления | N3029 | 13 | ||||||||||||||
| Улучшения в перечислениях | N3030 | 13 | Возможно | |||||||||||||
__VA_OPT__
|
N3033 | 8 | 12 | |||||||||||||
| Спецификаторы класса памяти для составных литералов | N3038 | 13 | ||||||||||||||
| nullptr | N3042 | 13 | 16 |
| ||||||||||||
| C23 возможность |
Страница(цы) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XL C++ |
IBM Open XL C++ для AIX |
IBM Open XL C++ для z/OS |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ (бывшая PGI)* |
Nvidia nvcc |
Возможности библиотек C23
| Этот раздел не завершён Причина: другой список для стандартных библиотек C |