Русская Википедия:C23

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

C23 — неофициальное название следующего (после Шаблон:Iw) стандарта языка Си[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

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Язык программирования Си