No Image

Язык программирования c стандарт c 11

СОДЕРЖАНИЕ
0 просмотров
10 марта 2020

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]

  • Выравнивание данных. Для этого в язык добавили спецификатор _Alignas , оператор alignof , функцию aligned_alloc и заголовочный файл ;
  • Спецификатор функции _Noreturn ;
  • Выражения, не зависящие от типа (Type-generic expressions) с использованием ключевого слова _Generic . Например, следующий макрос вычисления кубического корня cbrt(x) транслируется в cbrtl(x) , cbrt(x) или cbrtf(x) в зависимости от типа параметра x :
  • Поддержка многопоточности, для этого в стандарт добавили спецификатор типа _Thread_local , заголовочный файл , включающий в себя функции по созданию и управлению потоками, мьютексами, мониторами и функции управления хранилищем потока (англ.en:Thread-local storage). Также в C11 добавили квалификатор типа _Atomic и заголовочный файл для атомарных операций доступа к памяти;
  • Улучшенная поддержка Unicode, основанная на техническом отчете C Unicode Technical Report ISO/IEC TR 19769:2004 (типы char16_t и char32_t для хранения данных в кодировках UTF-16/UTF-32, функции преобразования, находящиеся в заголовочном файле и соответствующие префиксы u и U перед строковыми литералами, как и префикс u8 для строк в кодировке UTF-8);
  • Функция gets , признанная устаревшей, удалена из текущей ревизии стандарта языка Си (ISO/IEC 9899:1999/Cor.3:2007(E));
  • Интерфейсы для проверки границ массива (англ.en:Bounds checking , Annex K). [12] ;
  • Возможности анализирования (англ. 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 не удается [13] ;
  • Макросы для создания комплексных чисел (были добавлены потому, что код real + imaginary*I мог не привести к ожидаемому значению, если мнимая часть была бесконечной или «не числом» (NaN) [14] ).
Читайте также:  Как в повер поинт сделать видео презентацию

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

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

C11 (formerly C1X) is an informal name for ISO/IEC 9899:2011, [1] a past standard for the C programming language. It replaced C99 (standard ISO/IEC 9899:1999) and has been superseded by C18 (standard ISO/IEC 9899:2018). C11 mainly standardizes features already supported by common contemporary compilers, and includes a detailed memory model to better support multiple threads of execution. Due to delayed availability of conforming C99 implementations, C11 makes certain features optional, to make it easier to comply with the core language standard. [2] [3]

The final draft, N1570, [4] was published in April 2011. The new standard passed its final draft review on October 10, 2011 and was officially ratified by ISO and published as ISO/IEC 9899:2011 on December 8, 2011, with no comments requiring resolution by participating national bodies.

A standard macro __STDC_VERSION__ is defined with value 201112L to indicate that C11 support is available. [5] Some features of C11 are supported by the GCC starting with version 4.6, [6] Clang starting with version 3.1, [7] and IBM XL C starting with version 12.1. [8]

Contents

Changes from C99 [ edit ]

The standard includes several changes to the C99 language and library specifications, such as: [9]

  • Alignment specification ( _Alignas specifier, _Alignof operator, aligned_alloc function, header file)
  • The _Noreturn function specifier and the header file
  • Type-generic expressions using the _Generic keyword. For example, the following macro cbrt(x) translates to cbrtl(x) , cbrt(x) or cbrtf(x) depending on the type of x :
  • Multi-threading support ( _Thread_local storage-class specifier, header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as [10] for atomic operations supporting the C11 memory model).
  • Improved Unicode support based on the C Unicode Technical Report ISO/IEC TR 19769:2004 ( char16_t and char32_t types for storing UTF-16/UTF-32 encoded data, including conversion functions in and the corresponding u and U string literal prefixes, as well as the u8 prefix for UTF-8 encoded literals). [11]
  • Removal of the gets function, deprecated in the previous C language standard revision, ISO/IEC 9899:1999/Cor.3:2007(E).
  • Bounds-checking interfaces (Annex K). [12]
  • Analyzability features (Annex L).
  • More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store.
  • Anonymous structures and unions, useful when unions and structures are nested, e.g. in struct T < int tag ; union < float x ; int n ; >; >; .
  • Static assertions, which are evaluated during translation at a later phase than #if and #error , when types are understood by the translator.
  • An exclusive create-and-open mode ( "…x" suffix) for fopen . This behaves like O_CREAT|O_EXCL in POSIX, which is commonly used for lock files.
  • The quick_exit function as a third way to terminate a program, intended to do at least minimal deinitialization if termination with exit fails. [13]
  • Macros for the construction of complex values (partly because real + imaginary*I might not yield the expected value if imaginary is infinite or NaN). [14]
Читайте также:  Windows 10 не появляется меню пуск

Optional features [ edit ]

The new revision allows implementations to not support certain parts of the standard — including some that had been mandatory to support in the 1999 revision. [15] Programs can use predefined macros to determine whether an implementation supports a certain feature or not.

Optional features in C11

Feature Feature test macro Availability in C99 [16]
Analyzability (Annex L) __STDC_ANALYZABLE__ Not available
Multithreading ( ) __STDC_NO_THREADS__ Not available
IEC 60559 floating-point arithmetic (Annex F) __STDC_IEC_559__ Optional
Complex types ( ) __STDC_NO_COMPLEX__ Mandatory

Criticism [ edit ]

The optional bounds-checking interfaces (Annex K) remain controversial and have not been w >[19] (The open-source Open Watcom C/C++ does contain a "Safer C" library that is cons >[20] )

Международная Огранизация по Стандартизации (ISO) опубликовала новый международный стандарт языка программирования C: ISO/IEC 9899:2011, ранее известный как C1X. Основные изменения:

  • поддержка многопоточности;
  • улучшенная поддержка юникода;
  • обобщенные макросы (type-generic expressions, позволяют статичную перегрузку);
  • анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям);
  • управление выравниванием объектов;
  • статичные утверждения (static assertions);
  • удаление опасной функции gets (в пользу безопасной gets_s);
  • функция quick_exit;
  • спецификатор функции _Noreturn;
  • новый режим эксклюзивного открытия файла.

Кроме того, определен ряд необязательных для реализации возможностей, включая новый набор безопасных функций (в т. ч. для работы с массивами с проверкой границ). В этот список также попали возможности, которые в предыдущем стандарте считались обязательными: комплексная арифметика, массивы переменной длины.

Читайте также:  Пропал звук в игре варфейс

Некоторые возможности нового стандарта уже поддерживаются компиляторами GCC и Clang. Стоит, однако, отметить, что полной поддержки предыдущего стандарта C99 в этих и большинстве других компиляторов нет.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
Adblock detector