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 править

В марте 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 — новый стандарт языка, принятый в 2011 году как ISO/IEC 9899:2011. Основными новшествами является улучшенная поддержка Юникода, появление нового ключевого слова _Generic, кроссплатформенная поддержка многопоточности (threads.h) и поддержка атомарных типов в языке и библиотеке (stdatomic.h).

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

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

С17 править

По состоянию на 2023 год, 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. Дата обращения: 23 августа 2021. Архивировано 31 марта 2022 года.
  3. ISO/IEC 9899:1999 - Programming Languages -- C. Дата обращения: 24 июня 2012. Архивировано 10 октября 2016 года.
  4. ISO/IEC 9899:2011/Cor 1:2012. International Organization for Standardization. Дата обращения: 23 августа 2021. Архивировано 29 марта 2022 года.
  5. ISO/IEC 9899:2018 - Information technology -- Programming languages -- C. www.iso.org. Дата обращения: 23 августа 2021. Архивировано 10 августа 2018 года.
  6. The Standard - C. www.iso-9899.info. Дата обращения: 23 августа 2021. Архивировано 25 февраля 2005 года.