C23
11-10-2022, 17:00
C23 — неофициальное название следующего (после C17) стандарта языка Си. Ожидается, что он будет принят в 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 для арифметики чисел с плавающей точкой
- Типы _Decimal32, _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 соответственно.