Loading AI tools
стандарт мови програмування C З Вікіпедії, вільної енциклопедії
C11 або ISO/IEC 9899:2011 (неофіційно C1X) — стандарт для мови Сі (ISO/IEC 9899:2011[1]), який замінив чинний стандарт C99. Офіційно про випуск стандарту оголошено 19 грудня 2011[2]. Ця версія стандарту переважно стандартизує можливості, що існують у поширених сучасних компіляторах. Через погану сумісність поточних реалізацій C99 зі стандартом, C11 включає більше вибіркових можливостей для спрощення сумісності зі стандартом ядра мови[3]. Стандарт C18 (він же C17), що діє від 2018 року, фактично є уточненим варіантом C11, що виправляє знайдені в стандарті помилки[4].
Останню чернетку специфікації (доступна для безкоштовного звантаження) видано у квітні 2011 року під назвою N1570[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].
Остання чернетка від 11 квітня 2011 року включає такі зміни в мові C99 та специфікації бібліотеки:
_Alignas
, оператор alignof
, функцію aligned_alloc
та заголовний файл <stdalign.h>
;_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
, заголовний файл <threads.h>
, що включає функції для створення та керування нитками, м'ютексами, моніторами і функції керування сховищем потоку. Також у C11 додано кваліфікатор типу _Atomic
і заголовний файл <stdatomic.h>
для атомарних операцій доступу до пам'яті;char16_t
та char32_t
для зберігання даних у кодуваннях UTF-16/UTF-32, функції перетворення, що містяться в заголовковому файлі <uchar.h>
та відповідні префікси u
та U
перед рядковими літералами, а також префікс u8
для рядків у кодуванні UTF-8);gets
, визнану застарілою, видалено з поточної ревізії стандарту мови Сі (ISO/IEC 9899:1999/Cor.3:2007(E));struct T { int tag; union { float x; int n; }; };
.#if
і #error
, оскільки припущення обчислюється на пізнішій стадії трансляції, коли компілятор «знає», що якого типу;"…x"
для функції fopen. Цей режим аналогічний режимам POSIX[en] O_CREAT|O_EXCL
і зазвичай використовується для блокування файлів;quick_exit
— третя функція для завершення програми з мінімальною деініціалізацією значень, якщо завершити програму функцією exit[en]
не вдається[11];real + imaginary*I
міг не призвести до очікуваного значення, якщо уявна частина була нескінченною або «не числом» (NaN)).Нова ревізія стандарту дозволяє реалізаціям не підтримувати певні частини стандарту, зокрема ті, які раніше треба було підтримувати обов'язково (в C99). Програми можуть використовувати передвизначені макроси для з'ясування того, підтримує реалізація частину стандарту чи ні.
Можливість | Макрос | Доступність в C99 |
---|---|---|
Аналізування (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 )[12] |
__STDC_NO_ATOMICS__ |
Недоступна |
Масиви змінної довжини | __STDC_NO_VLA__ |
Обов'язково |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.