Реклама


C11

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

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

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

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


Изменения по сравнению с C99[ | код]

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

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X)

Выборочные возможности[ | код]

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

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

См. также[ | код]

Примечания[ | код]

  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. Brad Kelechava. The Current C Programming Language Standard – ISO/IEC 9899:2018 (C18). ANSI (13 ноября 2018). Дата обращения: 11 июня 2019.
  6. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
  7. Defect report #411. www.open-std.org. Дата обращения: 28 января 2016.
  8. [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.
  9. Clang 3.1 Release Notes. llvm.org. Дата обращения: 28 января 2016.
  10. Support for ISO C11 added to IBM XL C/C++ compilers (англ.). www.ibm.com (17 April 2014). Дата обращения: 28 января 2016.
  11. WG14 N1516 Committee Draft — October 4, 2010
  12. 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 года.
  13. WG14 N1327 Abandoning a Process
  14. WG14 N1464 Creation of complex value
  15. WG14 N1548 Committee Draft — December 2, 2010 6.10.8.3 Conditional feature macros
  16. ISO 9899:1999 6.10.8 Predefined macro names
  17. WG14 N1558 Mar 14-18 meeting minutes (draft)

Ссылки[ | код]

Реклама