C23 или ISO/IEC 9899:2024 (неофициально C2X) — стандарт для языка Си (ISO/IEC 9899:2024), который заменил существующий стандарт . Разработка стандарта началась в 2016 году, а официально о выпуске стандарта было объявлено 31 октября 2024 года.

Изменения по сравнению с 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) и unsigned _BitInt(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 соответственно.

Поддержка

+Возможность№ предложенияGCCClangMSVC_Static_assert22659919**Атрибуты255410919**Decimal23414.2*Бинарные константы25494.3 112.9 919.0**Метки до объявления250811Частично*__has_c_attribute255311919**Разделители цифр2626121319**#elifdef, #elifndef2645121319**Объявление функции в стиле K&R24321015Частично*Неименованные параметры функции24801111

Примечания

Ссылки C Working Group WG14 Documents N2731, working draft of the standard (October 2021)

Категория:Си (язык программирования)