C11

C11

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]


Содержание

Изменения по сравнению с C99

Черновик, датированный октябрём 2010 года включает следующие изменения в языке C99 и спецификации библиотеки:[7]

  • Выравнивание данных. Для этого в язык добавили спецификатор _Alignas,оператор alignof, функцию aligned_alloc и заголовочный файл <stdalign.h>;
  • Спецификатор функции _Noreturn;
  • Выражения, не зависящие от типа (Type-generic expressions) с использованием ключевого слова _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> для непрерываемых операций доступа к объектам;
  • Улучшенная поддержка Unicode, основанная на техническом отчете C Unicode Technical Report ISO/IEC TR 19769:2004 (типы 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;
  • Интерфейсы для проверки границ массива (англ. en:Bounds_checking, Annex K).[8] ;
  • Возможности анализирования (англ. Analyzability features, Annex L);
  • Добавлено больше макросов для получения характеристик чисел с плавающей точкой, касающихся денормализованных чисел и максимального числа десятичных цифр, которые можно хранить без потери точности;
  • Анонимные структуры и объединения, используемые для вложения структур и объединений, например, struct T { int tag; union { float x; int n; }; };.
  • Статические утверждения(англ. Assertion), которые лучше, чем команды препроцессора #if и #error, потому что утверждение вычисляется в более поздней стадии трансляции, когда компилятор «знает», что какого типа;
  • Привилегированный режим создания и открытия (англ. exclusive create-and-open mode) "…x" для функции fopen. Этот режим аналогичен режимам POSIX O_CREAT|O_EXCL и обычно используется для блокировки файлов;
  • Функция quick_exit — третья функция для завершения программы, с минимальной деинициализацией значений, если завершить программу функцией exit не удается[9];
  • Макросы для создания комплексных чисел (были добавлены потому, что код real + imaginary*I мог не привести к ожидаемому значению, если мнимая часть была бесконечной или «не числом»(NaN)[10].

Выборочные возможности

Новая ревизия стандарта позволяет реализациям не поддерживать определённые части стандарта, включая те, которые раньше надо было поддерживать обязательно (в C99)[11]. Программы могут использовать предопределённые макросы для определения того, поддерживает ли реализация часть стандарта или нет.

Выборочные возможности в C1X
Возможность Макрос Доступность в 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, предыдущая спецификация языка C
  • C++11, новый принятный стандарт C++ (известен также как C++0x — условное название во время его разработки)

Примечания

Ссылки

Стандарты языка Си
Предшественник:
C99



Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "C11" в других словарях:

  • C11 — C11, C.XI, C 11 or C.11 may refer to:* C 11 Gulfstream II, the military designation of the Gulfstream passenger jet * C11 Right of Association (Agriculture) Convention, 1921 * Fokker C.XI, a 1935 Dutch reconnaissance seaplane * HMS C11, a British …   Wikipedia

  • C11 — steht für: Viseon C11, einen Reisebus von Viseon aus dem Jahre 2011 Chrysler C11, ein PKW Modell aus dem Jahr 1936 HMS Liverpool (C11), ein Leichter Kreuzer der Southampton Klasse der britischen Royal Navy Hauptstraße C11, eine Straße in Namibia… …   Deutsch Wikipedia

  • Dictionary of chemical formulas/Merge/C11 — C11 …   Wikipedia

  • Mercedes-Benz C11 — A Mercedes Benz C11 on display at the Mercedes Benz Museum. Category Group C sports prototype …   Wikipedia

  • Mercedes-Benz C11 — Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías, prensa diaria o páginas de Internet fidedignas. Puedes añadirlas así o avisar …   Wikipedia Español

  • London Buses route C11 — Infobox London Bus number=C11 operator=Metroline garage=Perivale West (PA) vehicle=Dennis Dart SLF/ Plaxton Pointer 2 pvr=20 start=Brent Cross Shopping Centre via=North Cricklewood Cricklewood West Hampstead Hampstead Heath Gospel Oak Parliament… …   Wikipedia

  • Typ C11 — p1 C11 Klasse Schiffsdaten Schiffsart Containerschiff Reederei …   Deutsch Wikipedia

  • Hauptstraße C11 — Vorlage:Infobox hochrangige Straße/Wartung/NA C Hauptstraße C11 in Namibia Basisdaten …   Deutsch Wikipedia

  • HMS C11 — was a British C class submarine built by Vickers, Barrow. She was laid down on 6 April 1906 and was commissioned on 3 September 1907. C11 was sunk in a collision with collier Eddystone in the North Sea south of Cromer, Norfolk on the 15 July 1909 …   Wikipedia

  • HMS Liverpool (C11) — was a Town class light cruiser of the British Royal Navy in service from 1938 to 1952. Named after the port city of Liverpool in north west England, she served in the Second World War and with the Mediterranean Fleet from 1945 until her… …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»