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

Примечания править

  1. History of C. cppreference. Дата обращения: 27 апреля 2022. Архивировано 24 октября 2020 года.
  2. Keaton, David WG 14 N 2086 -- C2x Charter. www.open-std.org (19 сентября 2016). Дата обращения: 3 января 2021. Архивировано 14 февраля 2021 года.
  3. Revised C23 Schedule WG 14 N 2759. www.open-std.org. Дата обращения: 19 июня 2021. Архивировано 24 июня 2021 года.
  4. C23 - cppreference.com. en.cppreference.com. Дата обращения: 10 июля 2022. Архивировано 8 июня 2022 года.
  5. Proposal for C2x WG14 N2480. www.open-std.org. Дата обращения: 27 апреля 2022. Архивировано 20 января 2022 года.
  6. C2x Proposal: WG14 N2607. www.open-std.org. Дата обращения: 27 апреля 2022. Архивировано 9 февраля 2022 года.
  7. Meneide, JeanHeyd Not-So-Magic - typeof(…) in C (1 января 2022). Дата обращения: 25 марта 2022. Архивировано 8 марта 2022 года.

Ссылки править