Interested Article - C23
belle
- 2021-08-15
- 1
C23 — неофициальное название следующего (после ) стандарта языка Си . Ожидается, что он будет принят в 2023 и следовательно будет называться C23 .
Изменения по сравнению с C17
Изменения в языке
Устаревшие и удаленные возможности
- Архитектура должна обязательно поддерживать числа с дополнительным кодом
- Определения функций в стиле 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 для арифметики чисел с плавающей точкой
- Типы _ Decimal 32, _Decimal64 и _Decimal128.
- Поддержка _Static_assert
-
Атрибуты функций в стиле
C++11
:
-
nodiscard
; -
maybe_unused
; -
deprecated
; -
fallthrough
; -
noreturn
; -
reproducible
; -
unsequenced
.
-
- Улучшена арифметика над бинарными и десятичными числами
- Метки могут появляться до объявлений и в конце выражений
- Неименнованные параметры в объявлении функций
-
Бинарные литералы такие как
0b10101010
- Улучшенная поддержка const с массивами
- Возможность контроля переполнения целых чисел
-
Типы _BitInt(N)
иUnsignedBitInt(N)
- Разделители цифр: 0xFF’FF’FF’FF
-
Стандартизация оператора
typeof(...)
( typeof ) - Пустая инициализация с помощью {} (включая инициализацию 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 |
Примечания
- . cppreference . Дата обращения: 27 апреля 2022. 24 октября 2020 года.
- Keaton, David . www.open-std.org (19 сентября 2016). Дата обращения: 3 января 2021. 14 февраля 2021 года.
- . www.open-std.org . Дата обращения: 19 июня 2021. 24 июня 2021 года.
- . en.cppreference.com . Дата обращения: 10 июля 2022. 8 июня 2022 года.
- . www.open-std.org . Дата обращения: 27 апреля 2022. 20 января 2022 года.
- . www.open-std.org . Дата обращения: 27 апреля 2022. 9 февраля 2022 года.
- Meneide, JeanHeyd (1 января 2022). Дата обращения: 25 марта 2022. 8 марта 2022 года.
Ссылки
belle
- 2021-08-15
- 1