WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

C11 или ISO/IEC 9899:2011 (неофициально C1X) — актуальный стандарт для языка Си (ISO/IEC 9899:2011[1]), который заменил существующий стандарт C99. Официально о выпуске стандарта было объявлено 19 декабря 2011 года[2]. Эта версия стандарта большей частью стандартизирует возможности, существующие в распространённых современных компиляторах. Из-за плохой совместимости текущих реализаций C99 со стандартом, C11 включает в себя больше выборочных возможностей для упрощения совместимости со стандартом ядра языка [3][4].

Последняя черновая спецификация (доступная для бесплатного скачивания) имеет название N1570 и была издана в апреле 2011 года.[5]

Новый стандарт прошел заключительный пересмотр черновика 10 октября 2011 года и был официально ратифицирован ISO и опубликован в ISO / IEC 9899: 2011 8 декабря 2011 года, без каких-либо замечаний.

Определение стандартного макроса __STDC_VERSION__ со значением 201112L дает указание,что присутствует поддержка C11[6]. Некоторые возможности C11 поддерживаются GCC начиная с версии 4.6[7]. В Clang поддержка начинается с версии 3.1[8], а в IBM XL C поддержка с версии 12.1[9].


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

Последний черновик от 11 апреля 2011 года включает следующие изменения в языке C99 и спецификации библиотеки:[10]

  • Выравнивание данных. Для этого в язык добавили спецификатор _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));
  • Интерфейсы для проверки границ массива (англ. en:Bounds checking, Annex K).[11] ;
  • Возможности анализирования (англ. 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 не удается[12];
  • Макросы для создания комплексных чисел (были добавлены потому, что код real + imaginary*I мог не привести к ожидаемому значению, если мнимая часть была бесконечной или «не числом» (NaN)[13]).

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

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

Выборочные возможности в C1X
Возможность Макрос Доступность в C99[15]
Анализирование (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)[16] __STDC_NO_ATOMICS__ Недоступно
Массивы переменной длины __STDC_NO_VLA__ Обязательно

См. также

  • C99, предыдущая спецификация языка C
  • C++11, новый принятый стандарт C++ (известен также как C++0x — условное название во время его разработки)

Примечания

  1. ISO/IEC 9899:2011 — Information technology — Programming languages — C
  2. ISO/IEC JTC1/SC22/WG14 is the international standardization working group for the programming language C
  3. WG14 N1250 The C1X Charter
  4. WG14 N1460 Subsetting the C Standard
  5. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
  6. Defect report #411. www.open-std.org. Проверено 28 января 2016.
  7. [http://gcc.gnu.org/gcc-4.6/changes.html#c GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)]. gcc.gnu.org. Проверено 28 января 2016.
  8. Clang 3.1 Release Notes. llvm.org. Проверено 28 января 2016.
  9. Support for ISO C11 added to IBM XL C/C++ compilers (англ.). www.ibm.com (17 April 2014). Проверено 28 января 2016.
  10. WG14 N1516 Committee Draft — October 4, 2010
  11. Berin Babcock-McConnell API02-C. Functions that read or write to or from an array should take an argument to specify the source or target size (недоступная ссылка). Архивировано 29 сентября 2011 года.
  12. WG14 N1327 Abandoning a Process
  13. WG14 N1464 Creation of complex value
  14. WG14 N1548 Committee Draft — December 2, 2010 6.10.8.3 Conditional feature macros
  15. ISO 9899:1999 6.10.8 Predefined macro names
  16. WG14 N1558 Mar 14-18 meeting minutes (draft)

Ссылки

  • The C1X Charter
  • N1570, последний черновик стандарта C1X На 25 апреля 2011 года, датирован 2011-04-12.02.2019
  • ISO C Working Group’s official website
  • Plum, Thomas (April 6, 2012). “C Finally Gets A New Standard”. Dr. Dobb's Journal.
Стандарты языка Си
Предшественник:
C99

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии