Interested Article - C23

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

Примечания

  1. . cppreference . Дата обращения: 27 апреля 2022. 24 октября 2020 года.
  2. Keaton, David . www.open-std.org (19 сентября 2016). Дата обращения: 3 января 2021. 14 февраля 2021 года.
  3. . www.open-std.org . Дата обращения: 19 июня 2021. 24 июня 2021 года.
  4. . en.cppreference.com . Дата обращения: 10 июля 2022. 8 июня 2022 года.
  5. . www.open-std.org . Дата обращения: 27 апреля 2022. 20 января 2022 года.
  6. . www.open-std.org . Дата обращения: 27 апреля 2022. 9 февраля 2022 года.
  7. Meneide, JeanHeyd (1 января 2022). Дата обращения: 25 марта 2022. 8 марта 2022 года.

Ссылки

Источник —

Same as C23