ANSI C

ANSI C — стандарт мови C, опублікований американським Національним інститутом стандартів (ANSI). Дотримання цього стандарту допомагає створювати легко портовані програми.

Історія

Перший стандарт мови C опублікував Американський інститут ANSI. Через деякий час його прийняла міжнародна організація зі стандартизації ISO, яка й продовжила випускати наступні версії стандарту, які став приймати за стандарт і інститутом ANSI. Попри це стандарт досі частіше називають ANSI C, а не ISO C.

C89

1983 року американський Національний інститут стандартів сформував комітет X3J11 для створення специфікації стандарту C. 1989 року, після тривалого і напруженого процесу, стандарт завершили і затвердили як ANSI X3.159-1989 «Мова програмування C». Саме цю версію часто називають "ANSI C", або "C89" (щоб відрізнити її від C99).

C90

1990 року, стандарт ANSI C (з невеликими змінами) прийняла міжнародна організація зі стандартизації (ISO) як ISO/IEC 9899:1990. Цю версію іноді називають C90. Однак, терміни C89 і C90 стосуються по суті однієї мови.

C99

Докладніше: C99

У березні 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

Докладніше: C11

C11 — новий стандарт мови, прийнятий 2011 року як ISO/IEC 9899:2011. Основними оновленнями є покращена підтримка Юнікоду, поява нового ключового слова _Generic, платформна підтримка багатопотоковості (threads.h) та підтримка атомарних типів у мові та бібліотеці (stdatomic.h).

Для C11 випущено один коригуючий документ:

  • ISO/IEC 9899:2011/Cor 1:2012[4]

С17

Станом на 2021 рік, C17 був поточним стандартом мови C[5].

В основному C17 коригує дефекти, виявлені в C11, не вносячи ніяких нововведень[6].

Підтримка компіляторами

ANSI C нині підтримують практично всі поширені компілятори мови C. будь-яка програма, яку написано тільки з використанням стандарту і без специфічних апаратних припущень, гарантовано повинна працювати на будь-якій платформі з достатньо стандартною реалізацією мови C.

Примітки

  1. 14:00-17:00. ISO/IEC 9899:1999. ISO (англ.). Процитовано 21 січня 2019.
  2. INCITS/ISO/IEC 9899-2012. ANSI. Архів оригіналу за 31 березня 2022. Процитовано 29 березня 2022.
  3. ISO/IEC 9899:1999 - Programming Languages -- C. Архів оригіналу за 10 жовтня 2016. Процитовано 24 червня 2012.
  4. ISO/IEC 9899:2011/Cor 1:2012. International Organization for Standardization. Архів оригіналу за 29 березня 2022. Процитовано 29 березня 2022.
  5. ISO/IEC 9899:2018 - Information technology -- Programming languages -- C. www.iso.org. Архів оригіналу за 10 серпня 2018. Процитовано 29 березня 2022.
  6. The Standard - C. www.iso-9899.info. Архів оригіналу за 25 лютого 2005. Процитовано 29 березня 2022.

Посилання