C23

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

Изменения по сравнению с C17[2]

[править | править код]

Изменения в языке

[править | править код]

Устаревшие и удаленные возможности

[править | править код]
  • Архитектура должна обязательно поддерживать числа с дополнительным кодом
  • Определения функций в стиле 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.
  • Улучшена арифметика над бинарными и десятичными числами
  • Метки могут появляться до объявлений и в конце выражений
  • Неименнованные параметры в объявлении функций[3]
  • Бинарные литералы такие как 0b10101010
  • Улучшенная поддержка const с массивами[4]
  • Возможность контроля переполнения целых чисел
  • Типы _BitInt(N) и unsigned _BitInt(N)
  • Разделители цифр: 0xFF’FF’FF’FF
  • Стандартизация оператора typeof(...) (typeof)[5]
  • Пустая инициализация с помощью {} (включая инициализацию 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

Примечания

[править | править код]
  1. ISO/IEC 9899:2024 — Information technology — Programming languages — C.
  2. C23 - cppreference.com. en.cppreference.com. Дата обращения: 10 июля 2022. Архивировано 8 июня 2022 года.
  3. Proposal for C2x WG14 N2480. www.open-std.org. Дата обращения: 27 апреля 2022. Архивировано 20 января 2022 года.
  4. C2x Proposal: WG14 N2607. www.open-std.org. Дата обращения: 27 апреля 2022. Архивировано 9 февраля 2022 года.
  5. Meneide, JeanHeyd Not-So-Magic - typeof(…) in C (1 января 2022). Дата обращения: 25 марта 2022. Архивировано 8 марта 2022 года.