C11 (стандартная версия C)

редактировать
Стандарт языка программирования C, версия 2011 г.

C11 (ранее C1X ) - неофициальное название для ISO / IEC 9899: 2011, бывшего стандарта для языка программирования C. Он заменил C99 (стандарт ISO / IEC 9899: 1999) и был заменен на C18 (стандарт ISO / IEC 9899: 2018). C11 в основном стандартизирует функции, уже поддерживаемые распространенными современными компиляторами, и включает подробную модель памяти для лучшей поддержки нескольких потоков выполнения. Из-за задержки с выпуском соответствующих реализаций C99, C11 делает некоторые функции необязательными, чтобы упростить соответствие стандарту основного языка.

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

Стандартный макрос __STDC_VERSION__определяется со значением 201112L, чтобы указать, что доступна поддержка C11. Некоторые функции C11 поддерживаются GCC начиная с версии 4.6, Clang начиная с версии 3.1, IBM XL C начиная с версии 12.1. И Microsoft Visual C ++ начиная с VS 2019 (16.8)

Содержание
  • 1 Отличия от C99
  • 2 Дополнительные функции
  • 3 Критика
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Изменения по сравнению с C99

Стандарт включает в себя несколько изменений в спецификациях языка и библиотеки C99, таких как:

  • Спецификация выравнивания (_Alignasспецификатор, оператор _Alignof, функция align_alloc, файл заголовка)
  • Спецификатор функции _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спецификатор класса хранения, заголовок, включая функции создания / управления потоком, мьютекс, условная переменная и поток- специальные функции хранения, а также для атомарных операций, поддерживающих модель памяти C11).
  • Улучшенная поддержка Unicode на основе технического отчета C Unicode ISO / IEC TR 19769 : 2004 (char16_tи char32_tтипы для хранения данных в кодировке UTF-16 / UTF-32, включая функции преобразования в и соответствующие префиксы строковых литералов uи U, а также префикс u8для кодированных литералов UTF-8 ).
  • Удаление функции gets , устаревшей в предыдущем C l редакция стандарта языка, ISO / IEC 9899: 1999 / Cor.3: 2007 (E).
  • Проверка границ интерфейсов (приложение K).
  • Возможности анализа (приложение L).
  • Дополнительные макросы для запроса характеристик типов с плавающей запятой, касающихся субнормальных чисел с плавающей запятой и количества десятичных цифр, которые тип может хранить.
  • Анонимные структуры и объединения, полезно, когда союзы и структуры вложены, например в struct T {int tag; объединение {float x; int n; }; };.
  • Статические утверждения, которые оцениваются во время перевода на более позднем этапе, чем #ifи #error, когда типы понимаются переводчиком.
  • Эксклюзивный режим создания и открытия (суффикс "… x") для fopen . Это ведет себя как O_CREAT | O_EXCLв POSIX, который обычно используется для файлов блокировки.
  • Функция quick_exit как третий способ завершить программу, предназначенный для выполнения хотя бы минимальной деинициализации, если завершение с помощью exit не удалось.
  • Новая функция timespec_getи соответствующая структура в со степенью совместимости POSIX.
  • Макросы для построения комплексных значений (отчасти потому, что действительное + мнимое * Iможет не дать ожидаемого значения, если мнимоебесконечно или NaN ).
Необязательные функции

Новая версия позволяет реализациям не поддерживать определенные части стандарта, включая некоторые которые были обязательными для поддержки в редакции 1999 г. Программы могут использовать предопределенные макросы, чтобы определить, поддерживает ли реализация определенную функцию или нет.

Дополнительные функции в C11
FeatureМакрос проверки функцийДоступность в C99
Анализируемость (Ann ex L)__STDC_ANALYZABLE__Недоступно
Интерфейсы проверки границ (Приложение K)__STDC_LIB_EXT1__Недоступно
Многопоточность ()__STDC_NO_THREADS__Недоступно
Атомарная примитивы и типы (и квалификатор типа _Atomic)__STDC_NO_ATOMICS__Недоступно
IEC 60559 арифметика с плавающей запятой (приложение F)__STDC_IEC_559 __Необязательно
МЭК 60559 совместимая комплексная арифметика (Приложение G)__STDC_IEC_559_COMPLEX__Необязательно
Сложные типы ()__STDC_NO_COMPLEX__Обязательный для размещенных реализаций
Массивы переменной длины__ STDC_NO_VLA__Обязательный
Критика

Необязательные интерфейсы проверки границ (Приложение K) остаются спорными и не получили широкого распространения, и было предложено их исключить или исключить из следующей версии стандарта. Даже Microsoft, главный сторонник этого интерфейса, не соответствует этому определению. Кроме того, Приложение K не включает более полезные TR24731-2 (функции динамического распределения), такие как vasprintfи open_memstream. Несколько реализаций с открытым исходным кодом включают Open Watcom C / C ++ "Safer C" библиотеку и safeclib.

См. Также
  • значок Портал компьютерного программирования
Ссылки
Внешние ссылки
Предшествовал. C99 Язык C стандартыПреуспел. C18
Последняя правка сделана 2021-05-13 09:27:48
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте