C23
From cppreference.net
<
c
ISO/IEC 9899:2024 , также известный как C23 , является текущей редакцией стандарта C.
- Последний рабочий проект C23 (n3149, 2023-07-09, архив zip с парольной защитой, см. n3150 ).
- Ближайший общедоступный черновик к C23 — первый черновик C2Y (n3220, 2024-02-22, который отличается от C23 только редакционными правками, см. n3221 ).
|
Этот раздел не завершён
Причина: принятые изменения включены в финальный черновик |
C23 увеличивает значение предопределенного макроса __STDC_VERSION__ до 202311L .
Содержание |
Новые возможности языка
- Десятичные типы с плавающей запятой ( _Decimal32 , _Decimal64 и _Decimal128 )
- Точные побитовые целочисленные типы ( _BitInt )
- Двоичные целочисленные константы
-
u8символьные константы -
Изменение типа
u8строковых литералов -
Разделитель цифр
' - Пустой инициализатор = { }
-
Атрибуты
-
[[ deprecated ]] -
[[ fallthrough ]] -
[[ maybe_unused ]] -
[[ nodiscard ]] -
[[ noreturn ]] -
[[ reproducible ]] -
[[ unsequenced ]]
-
- Безымянные параметры в определениях функций
- Идентичные cvr-квалификации для типов массивов и их типов элементов
- Однопараметрический static_assert
- alignas и alignof становятся ключевыми словами (могут быть предопределёнными макросами для совместимости)
- static_assert становится ключевым словом (может быть предопределённым макросом для совместимости)
- thread_local становится ключевым словом (может быть предопределённым макросом для совместимости)
-
Метки
перед объявлениями и
} - nullptr константа и связанный тип nullptr_t
- true и false становятся ключевыми словами (могут быть предопределёнными макросами для совместимости)
- Новые препроцессорные директивы
-
Прагмы для направления округления
-
STDCFENV_ROUND -
STDCFENV_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__ .
Новые возможности библиотеки
Новые заголовки
Функции библиотеки
-
Расширенные математические функции с двоичными числами с плавающей запятой
-
Этот раздел не завершен
Причина: Список уточняется
-
-
Математические функции с десятичными числами с плавающей запятой
-
-
d Nварианты для существующих и новых математических функций с плавающей запятой - quantized N ()
- samequantumd N ()
- quantumd N ()
- llquantexpd N ()
- encodedecd N ()
- decodedecd N ()
- encodebind N ()
- decodebind N ()
-
-
- Функции форматирования чисел с плавающей запятой
-
Поддержка 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()
-
w Nиwf Nмодификаторы длины для [u]int N _t и [u]int_fast N _t соответственно -
H,D, иDDмодификаторы длины для _Decimal32 , _Decimal64 , и _Decimal128 соответственно -
bспецификатор преобразования для беззнаковых целочисленных типов
-
- timespec_getres()
- Макроопределения для ширины целочисленных типов
- Дополнительные макроопределения числовых ограничений для типов с плавающей запятой
- Макроопределения для проверки версии библиотеки
Устаревшие возможности
Удаленные возможности
- Устаревшие объявления функций и определения функций
- Представления для знаковых целых чисел отличные от дополнительного кода
- Разрешение, что u / U -префиксные символьные константы и строковые литералы могут не быть UTF-16/32
- Смешанная конкатенация широких строковых литералов
- Поддержка вызова realloc() с нулевым размером (поведение становится неопределённым)
- alignas и alignof предоставляются как макросы, определённые в <stdalign.h> (становятся ключевыми словами)
- static_assert предоставляется как макрос, определённый в <assert.h> (становится ключевым словом)
- thread_local предоставляется как макрос, определённый в <threads.h> (становится ключевым словом)
Устаревшие возможности
- <stdnoreturn.h>
- <stdalign.h>
- <stdbool.h>
- Устаревшие макросы проверки возможностей
- _Noreturn спецификатор функции
- _Noreturn токен атрибута
- asctime()
- ctime()
- DECIMAL_DIG (используйте соответствующий типозависимый макрос ( FLT_DECIMAL_DIG и т.д.) вместо этого)
- Определение следующих макросов ограничений чисел в <math.h> (их следует использовать через <float.h> )
- __bool_true_false_are_defined
Отчеты о дефектах
| Отчёты о дефектах, исправленные в C23 (? дефектов) |
|---|
Поддержка компиляторами
Основные возможности языка C23
|
Этот раздел не завершён
Причина: статус для Apple Clang и других компиляторов с поддержкой C2x |
|
Функция C23
|
Документ(ы)
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| static_assert без сообщения | N2265 | 9 | 9 | Да | Да | 6.5 | 2021.1.2 (clang based) | ||||
[[
nodiscard
]]
|
N2267 | 10 | 9 | Да | 6.4 | 2021.1.2 (clang based) | |||||
[[
maybe_unused
]]
|
N2270 | 10 | 9 | Да | 6.4 | 2021.1.2 (clang based) | |||||
[[
deprecated
]]
|
N2334 | 10 | 9 | Да | 6.4 | 2021.1.2 (clang based) | |||||
| Атрибуты |
N2335
N2554 |
10 | 9 | Да | 6.4 | 2021.1.2 (clang based) | |||||
| Типы десятичных чисел с плавающей запятой IEEE 754 | N2341 |
4.2
(частично)*
12 |
13.0 (частично)* | ||||||||
[[
fallthrough
]]
|
N2408 | 10 | 9 | Да | 6.4 | 2021.1.2 (clang based) | |||||
u8
символьные константы
|
N2418 | 10 | 15 | 6.5 | 2022.2 | ||||||
| Удаление function definitions без прототипа | N2432 | 10 | 15 | 2022.2 | |||||||
[[
nodiscard
]]
с сообщением
|
N2448 | 11 | 10 | Да | 6.4 | 2021.1.2 (clang based) | |||||
| Безымянные параметры в определениях функций | N2480 | 11 | 11 | Да | 6.4 | 2021.1.2 (clang based) | |||||
| Метки перед объявлениями и в конце блоков | N2508 | 11 | 16 | Частично* | 6.5 | 17.0 * | |||||
| Бинарные целочисленные константы | N2549 |
4.3
*
11 |
2.9
*
9 |
19.0 (2015)* * | Да | 6.5 | 11.0 * | ||||
| __has_c_attribute в препроцессорных условных директивах | N2553 | 11 | 9 | Да | 6.5 | 2021.1.2 (clang based) | |||||
| Разрешить дублирование атрибутов | N2557 | 11 | 13 | Да | 6.5 | 2021.4 (clang-based | |||||
| IEEE 754 типы обмена и расширенные типы | N2601 |
7
(частично)*
14 |
6 (частично)* | Частично* | |||||||
| Разделители цифр | N2626 | 12 | 13 | 19.0 (2015)* * | Да | 6.5 | 18.0 * | ||||
#elifdef
и
#elifndef
|
N2645 | 12 | 13 | 19.40* | 13.1.6* | 6.5 | 2021.4 | ||||
Изменение типа
u8
строковых литералов
|
N2653 | 13 | |||||||||
[[
maybe_unused
]]
для меток
|
N2662 | 11 | 16 | 6.5 | 2022.2 | ||||||
| #warning | N2686 | Да | Да | Да | 6.5 | Да | |||||
| Битово-точные целочисленные типы ( _BitInt ) | N2763 | 14 (частично)* | 15 | 6.5 | 2022.2 | ||||||
[[
noreturn
]]
|
N2764 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Суффиксы для битово-точных целочисленных констант | N2775 | 14 | 15 | 2022.2 | |||||||
| __has_include в препроцессорных условных конструкциях | N2799 | 5 | Да | 19.11* | Да | 6.5 | 18.0 | ||||
| Синтаксис идентификаторов с использованием Стандарта Юникод, Приложение 31 | N2836 | 13 | 15 | 6.5 | 2022.2 | ||||||
| Удаление объявлений функций без прототипа | N2841 | 13 | 15 | 2022.2 | |||||||
| Пустые инициализаторы | N2900 |
Частично*
13 |
Частично* | Частично* | Частично* | Частично* | |||||
| typeof и typeof_unqual |
N2927
N2930 |
Частично*
13 |
Частично*
16 |
19.39* | Частично* | Частично* | Частично* | Частично* | |||
| Новая орфография ключевых слов | N2934 | 13 | 16 | 6.5 | |||||||
| Предопределенные true и false | N2935 | 13 | 15 | 2022.2 | |||||||
[[
unsequenced
]]
и
[[
reproducible
]]
|
N2956 | 15 | |||||||||
| Ослабление требований для списка вариативных параметров | N2975 | 13 | 16 | 6.5 | 2023.1 | ||||||
| Вывод типов в определениях объектов | N3007 | 13 | 18 | ||||||||
| #embed | N3017 | 15 | 19 | ||||||||
| constexpr объекты | N3018 | 13 | 19 | ||||||||
| Улучшенные обычные перечисления | N3029 | 13 | 20 * | ||||||||
| Перечисления с фиксированными базовыми типами | N3030 | 13 | 20 * | ||||||||
__VA_OPT__
|
N3033 |
8
13 |
12 | 19.39* | 6.5 | ||||||
| Спецификаторы класса хранения для составных литералов | N3038 | 13 | |||||||||
| nullptr | N3042 | 13 | 16 | ||||||||
|
Функциональность C23 |
Документ(ы) |
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
Функции библиотеки C23
|
Этот раздел не завершён
Причина: требуется отдельный список для стандартных библиотек C |