C23
(перенаправлено с «C2x»)
C23 — неофициальное название следующего (после C17[en]) стандарта языка Си[1][2]. Ожидается, что он будет принят в 2023 и следовательно будет называться C23[3].
Изменения по сравнению с C17[4]Править
Изменения в языкеПравить
Устаревшие и удаленные возможностиПравить
- Архитектура должна обязательно поддерживать числа с дополнительным кодом
- Определения функций в стиле K&R
- Определение этих макросов в <math.h> (вынесено в <limits.h>)
- INFINITY
- DEC_INFINITY
- NAN
- DEC_NAN
- Атрибут No_return
- Поддержка вызова realloc с 0 размеров (теперь это неопределенное поведение).
- Макрос __bool_true_false_are_defined
- Макрос __alignof_is_defined и __alignas_is_defined
НововведенияПравить
Новые директивы препроцессораПравить
- #embed
- #elifdef и #elifndef
- #warning
- Поддержка ISO/IEC 60559:2020, текущей версии стандарта IEEE 754 standard для арифметики чисел с плавающей точкой
- Типы _Decimal32, _Decimal64 и _Decimal128.
- Поддержка _Static_assert
- Атрибуты функций в стиле C++11:
nodiscard
maybe_unused
deprecated
fallthrough
noreturn
reproducible
unsequenced
- Улучшена арифметика над бинарными и десятичными числами
- Метки могут появляться до объявлений и в конце выражений
- Неименнованные параметры в объявлении функций[5]
- Бинарные литералы такие как
0b10101010
- Улучшенная поддержка const с массивами[6]
- Возможность контроля переполнения целых чисел
Типы _BitInt(N)
иUnsignedBitInt(N)
- Разделители цифр: 0xFF’FF’FF’FF
- Стандартизация оператора
typeof(...)
(typeof)[7] - Пустая инициализация с помощью {} (включая инициализацию VLA)
- alignas, alignof, bool, true, false, static_assert, thread_local теперь ключевые слова
- pragma для направления округления
- FENV_ROUND
- FENV_DEC_ROUND
Изменения в стандартной библиотекеПравить
Новые заголовочные файлыПравить
- stdbit.h
- stdckdint.h
- Некоторые POSIX функции становятся стандартными
memccpy()
strdup()
strndup()
asctime_r()
ctime_r()
gmtime_r()
localtime_r()
- Поддержка UTF8
- псевдоним
char8_t
mbrtoc8()
c8rtomb()
- псевдоним
atomic_char8_t
- макрос
ATOMIC_CHAR8_T_LOCK_FREE
- псевдоним
- Расширения для fscanf, fprintf
- Спецификатор
%b
для вывода бинарных чисел - H,D,DD для _Decimal32, _Decimal64 и _Decimal128 соответственно.
- Спецификатор
ПоддержкаПравить
Этот раздел слишком короткий. |
Возможность | № предложения | GCC | Clang | MSVC |
---|---|---|---|---|
_Static_assert | 2265 | 9 | 9 | |
Атрибуты | 2554 | 10 | 9 | |
Decimal | 2341 | 4.2* | ||
Бинарные константы | 2549 | 4.3
11 |
2.9
9 |
19.0** |
Метки до объявления | 2508 | 11 | Частично* | |
__has_c_attribute | 2553 | 11 | 9 | |
Разделители цифр | 2626 | 12 | 13 | 19** |
#elifdef,
#elifndef |
2645 | 12 | 13 | |
Объявление функции в стиле K&R | 2432 | 10 | 15 | |
Неименованные параметры функции | 2480 | 11 | 11 |
ПримечанияПравить
- ↑ History of C (неопр.). cppreference. Дата обращения: 27 апреля 2022. Архивировано 24 октября 2020 года.
- ↑ Keaton, David WG 14 N 2086 -- C2x Charter (неопр.). www.open-std.org (19 сентября 2016). Дата обращения: 3 января 2021. Архивировано 14 февраля 2021 года.
- ↑ Revised C23 Schedule WG 14 N 2759 (неопр.). www.open-std.org. Дата обращения: 19 июня 2021. Архивировано 24 июня 2021 года.
- ↑ C23 - cppreference.com (неопр.). en.cppreference.com. Дата обращения: 10 июля 2022. Архивировано 8 июня 2022 года.
- ↑ Proposal for C2x WG14 N2480 (неопр.). www.open-std.org. Дата обращения: 27 апреля 2022. Архивировано 20 января 2022 года.
- ↑ C2x Proposal: WG14 N2607 (неопр.). www.open-std.org. Дата обращения: 27 апреля 2022. Архивировано 9 февраля 2022 года.
- ↑ Meneide, JeanHeyd Not-So-Magic - typeof(…) in C (неопр.) (1 января 2022). Дата обращения: 25 марта 2022. Архивировано 8 марта 2022 года.