ANSI C
ANSI C — стандарт мови C, опублікований американським Національним інститутом стандартів (ANSI). Дотримання цього стандарту допомагає створювати легко портовані програми.
Перший стандарт мови C опублікував Американський інститут ANSI. Через деякий час його прийняла міжнародна організація зі стандартизації ISO, яка й продовжила випускати наступні версії стандарту, які став приймати за стандарт і інститутом ANSI. Попри це стандарт досі частіше називають ANSI C, а не ISO C.
1983 року американський Національний інститут стандартів сформував комітет X3J11 для створення специфікації стандарту C. 1989 року, після тривалого і напруженого процесу, стандарт завершили і затвердили як ANSI X3.159-1989 «Мова програмування C». Саме цю версію часто називають "ANSI C", або "C89" (щоб відрізнити її від C99).
1990 року, стандарт ANSI C (з невеликими змінами) прийняла міжнародна організація зі стандартизації (ISO) як ISO/IEC 9899:1990. Цю версію іноді називають C90. Однак, терміни C89 і C90 стосуються по суті однієї мови.
У березні 2000 року ANSI прийняв стандарт ISO/IEC 9899:1999[1]. Цей стандарт зазвичай називають C99. Основні нововведення:
- Нові вбудовані типи даних:
long long
,_Bool
,_Complex
й_Imaginary
. - Нові можливості мови, зокрема, масиви змінної довжини, індекси статичних масивів, compound-літерали, варіативні макроси, ключове слово restrict.
- Нові заголовні файли, зокрема,
stdint.h
,tgmath.h
,fenv.h
,complex.h
. - Можливості, сумісні зі C++, зокрема, inline-функції, однорядкові коментарі
//
, змішання декларацій та коду, символи Юнікоду в ідентифікаторах. - Вилучено небезпечні елементи C89, наприклад, неявне оголошення функцій і неявне
int
.
Для C99 випущено три коригувальних документи:
- ISO/IEC 9899:1999/Cor 1:2001(E)
- ISO/IEC 9899:1999/Cor 2:2004(E)
- ISO/IEC 9899:1999/Cor 3:2007(E)
C99 більше не підтримують комітети ANSI/INCITS[2] та ISO/IEC[3] на користь підтримки та розробки C11.
C11 — новий стандарт мови, прийнятий 2011 року як ISO/IEC 9899:2011. Основними оновленнями є покращена підтримка Юнікоду, поява нового ключового слова _Generic
, платформна підтримка багатопотоковості (threads.h
) та підтримка атомарних типів у мові та бібліотеці (stdatomic.h
).
Для C11 випущено один коригуючий документ:
- ISO/IEC 9899:2011/Cor 1:2012[4]
Станом на 2021 рік, C17 був поточним стандартом мови C[5].
В основному C17 коригує дефекти, виявлені в C11, не вносячи ніяких нововведень[6].
ANSI C нині підтримують практично всі поширені компілятори мови C. будь-яка програма, яку написано тільки з використанням стандарту і без специфічних апаратних припущень, гарантовано повинна працювати на будь-якій платформі з достатньо стандартною реалізацією мови C.
- ↑ 14:00-17:00. ISO/IEC 9899:1999. ISO (англ.). Процитовано 21 січня 2019.
- ↑ INCITS/ISO/IEC 9899-2012. ANSI. Архів оригіналу за 31 березня 2022. Процитовано 29 березня 2022.
- ↑ ISO/IEC 9899:1999 - Programming Languages -- C. Архів оригіналу за 10 жовтня 2016. Процитовано 24 червня 2012.
- ↑ ISO/IEC 9899:2011/Cor 1:2012. International Organization for Standardization. Архів оригіналу за 29 березня 2022. Процитовано 29 березня 2022.
- ↑ ISO/IEC 9899:2018 - Information technology -- Programming languages -- C. www.iso.org. Архів оригіналу за 10 серпня 2018. Процитовано 29 березня 2022.
- ↑ The Standard - C. www.iso-9899.info. Архів оригіналу за 25 лютого 2005. Процитовано 29 березня 2022.
- Робоча група ISO C [Архівовано 12 лютого 2018 у Wayback Machine.](англ.)