26-09-2023
C11 или ISO/IEC 9899:2011 (неофициально C1X) — новый стандарт для языка Си (ISO/IEC 9899:2011[1]), который заменил существующий стандарт C99. Официально о выпуске стандарта было объявлено 19 декабря 2011 года[2]. Эта версия стандарта большей частью стандартизирует возможности, существующие в распостранённых современных компиляторах. Из-за плохой совместимости текущих реализаций C99 со стандартом, C11 включает в себя больше выборочных возможностей для упрощения совместимости со стандартом ядра языка. [3][4]. Хотя стандарт принят совсем нeдавно, но в GCC версии 4.6 уже есть зачаточная поддержка некоторых возможностей, описанных в черновике стандарта.[5]
Последняя черновая спецификация (доступная для бесплатного скачивания) имеет название N1570 и была издана в апреле 2011 года.[6]
Содержание |
Черновик, датированный октябрём 2010 года включает следующие изменения в языке C99 и спецификации библиотеки:[7]
_Alignas
,оператор alignof
, функцию aligned_alloc
и заголовочный файл <stdalign.h>
;_Noreturn
;_Generic
. Например, следующий макрос вычисления кубического корня cbrt(x)
транслируется в cbrtl(x)
, cbrt(x)
или cbrtf(x)
в зависимости от типа параметра x
:
#define cbrt(X) _Generic((X), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(X)
_Thread_local
, заголовочный файл <threads.h>
, включающий в себя функции по созданию и управлению потоками, мьютексами, мониторами и функции управления хранилищем потока (англ. en:Thread-local storage). Также в C11 добавили квалификатор типа _Atomic
и заголовочный файл <stdatomic.h>
для непрерываемых операций доступа к объектам;char16_t
и char32_t
для хранения данных в кодировках UTF-16/UTF-32, функции преобразования, находящиеся в заголовочном файле <uchar.h>
и соответствующие префиксы u
и U
перед строковыми литералами, как и префикс u8
для строк в кодировке UTF-8);gets
, признанная устаревшей в текущей ревизии стандарта языка Си (ISO/IEC 9899:1999/Cor.3:2007(E)), была заменена новой безопасной альтернативой gets_s
;struct T { int tag; union { float x; int n; }; };
.#if
и #error
, потому что утверждение вычисляется в более поздней стадии трансляции, когда компилятор «знает», что какого типа;"…x"
для функции fopen. Этот режим аналогичен режимам POSIX O_CREAT|O_EXCL
и обычно используется для блокировки файлов;quick_exit
— третья функция для завершения программы, с минимальной деинициализацией значений, если завершить программу функцией exit
не удается[9];real + imaginary*I
мог не привести к ожидаемому значению, если мнимая часть была бесконечной или «не числом»(NaN)[10].Новая ревизия стандарта позволяет реализациям не поддерживать определённые части стандарта, включая те, которые раньше надо было поддерживать обязательно (в C99)[11]. Программы могут использовать предопределённые макросы для определения того, поддерживает ли реализация часть стандарта или нет.
Возможность | Макрос | Доступность в C99[12] |
---|---|---|
Анализирование (Annex L) | __STDC_ANALYZABLE__ |
Недоступно |
Действия с дробными числами по стандарту IEC 60559 (Annex F) | __STDC_IEC_559__ |
Выборочно |
Арифметика комплексных чисел, совместимая со стандартом IEC 60559 (Annex G) | __STDC_IEC_559_COMPLEX__ |
Выборочно |
Интерфейсы проверки границ массива (Annex K) | __STDC_LIB_EXT1__ |
Недоступно |
Типы комплексных чисел (<complex.h> ) |
__STDC_NO_COMPLEX__ |
Обязательно |
Многопоточное программирование (<threads.h> ) |
__STDC_NO_THREADS__ |
Недоступно |
Атомарные операции (<stdatomic.h> и квалификатор типа _Atomic )[13] |
__STDC_NO_ATOMICS__ |
Недоступно |
Массивы переменной длины | __STDC_NO_VLA__ |
Обязательно |
Стандарты языка Си |
Предшественник: C99 |
Язык программирования Си | |
---|---|
Компиляторы | Borland Turbo C • Clang • GCC • LCC • Pelles C • PCC • TCC • Visual C++ (C++/CLI • C++/CX) • Watcom C/C++ compiler |
Библиотеки | Стандартная библиотека языка Си • glibc • dietlibc • uClibc • Newlib • Eglibc • Bionic |
Особенности | C-строка • Синтаксис • Препроцессор • Типы и объявления переменных • Функции |
Избранные потомки | C++ • C# • D • Objective-C • Alef • Limbo • Go • Vala |
C и другие языки | C и C++ (Совместимость • Операторы) • Сравнение Pascal и C • Компилятор C в байт-код Java |
Категория:Язык программирования Си |
Это заготовка статьи о компьютерных языках. Вы можете помочь проекту, исправив и дополнив её. |
C11.