ANSI C (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
[править | править код]В основном C17 корректирует дефекты, обнаруженные в C11, не внося никаких нововведений[5].
C23
[править | править код]Стандарт официально вышел 31 октября 2024 года.
Поддержка компиляторами
[править | править код]ANSI C на сегодняшний день поддерживается практически всеми распространёнными компиляторами языка C. Любая программа, написанная только с использованием стандарта и не допускающая специфических аппаратных допущений, гарантированно должна работать на любой платформе с достаточно стандартной реализацией языка C.
Ссылки
[править | править код]- Рабочая группа ISO C (англ.)
Примечания
[править | править код]- ↑ 14:00-17:00 ISO/IEC 9899:1999 (англ.). ISO. Дата обращения: 21 января 2019.
- ↑ INCITS/ISO/IEC 9899-2012 . ANSI. Дата обращения: 23 августа 2021. Архивировано 31 марта 2022 года.
- ↑ ISO/IEC 9899:1999 - Programming Languages -- C . Дата обращения: 24 июня 2012. Архивировано 10 октября 2016 года.
- ↑ ISO/IEC 9899:2011/Cor 1:2012 . International Organization for Standardization. Дата обращения: 23 августа 2021. Архивировано 29 марта 2022 года.
- ↑ The Standard - C . www.iso-9899.info. Дата обращения: 23 августа 2021. Архивировано 25 февраля 2005 года.