Jump to content

АНСИ С

(Перенаправлено с C89 (версия C) )

ANSI C , ISO C и Standard C — это последовательные стандарты языка программирования C, опубликованные Американским национальным институтом стандартов (ANSI) и ISO/IEC JTC 1/SC 22 /WG 14 Международной организации по стандартизации (ISO) и Международной организации по стандартизации (ISO). Международная электротехническая комиссия (МЭК). Исторически сложилось так, что названия относились конкретно к исходной и наиболее поддерживаемой версии стандарта (известной как C89 или C90 ). Разработчикам программного обеспечения, пишущим на C, рекомендуется соблюдать стандарты, поскольку это способствует переносимости между компиляторами.

История и мировоззрение

[ редактировать ]

Первый стандарт C был опубликован ANSI. Хотя этот документ впоследствии был принят ISO/IEC, а последующие версии, опубликованные ISO/IEC, были приняты ANSI, «ANSI C» по-прежнему используется для обозначения стандарта. [1] В то время как некоторые разработчики программного обеспечения используют термин ISO C, другие нейтральны к стандартизации и используют стандарт C.

Неофициальная спецификация: K&R C ( C78 )

[ редактировать ]

Неформальная спецификация 1978 года ( Брайана Кернигана и Денниса Ритчи книга «Язык программирования C» ).

Стандартизация C

[ редактировать ]

В 1983 году Американский национальный институт стандартов сформировал комитет X3J11 для установления стандартной спецификации C. В 1985 году был выпущен первый проект стандарта, иногда называемый C85 . В 1986 году был выпущен еще один проект стандарта, иногда называемый C86 . Предварительная версия Standard C была опубликована в 1988 году и иногда называлась C88 . [2]

Стандарт ANSI был разработан в 1989 году и ратифицирован как ANSI X3.159-1989 «Язык программирования C». Эту версию языка часто называют «ANSI C». Позже иногда используется метка «C89», чтобы отличить его от C90, но с использованием того же метода маркировки.

Тот же стандарт, что и C89, был ратифицирован ISO/IEC как ISO/IEC 9899:1990, с изменениями только форматирования. [3] который иногда называют C90. Таким образом, термины «C89» и «C90» относятся к языку, который практически идентичен.

Этот стандарт был отменен как ANSI/INCITS [4] и ИСО/МЭК. [5]

В 1995 году ISO / IEC опубликовал расширение стандарта C под названием «Поправка 1». В конечном итоге его полное название стало ISO/IEC 9899:1990/AMD1:1995 или по прозвищу C95 . Помимо исправления ошибок, в возможности языка были внесены дальнейшие изменения. [6] [7] такой как:

  • Улучшена поддержка многобайтовых и широких символов в стандартной библиотеке. <wchar.h> и <wctype.h> а также многобайтовый ввод-вывод
  • Добавление орграфов в язык
  • Спецификация стандартных макросов для альтернативной спецификации операторов, например and для &&
  • Спецификация стандартного макроса __STDC_VERSION__

В дополнение к поправке ISO опубликовала два технических исправления для C90:

  • ISO/IEC 9899:1990/Cor 1:1994 TCOR1 в 1994 г. [8]
  • ISO/IEC 9899:1990/Кор 2:1996 в 1996 г. [9]

Тест препроцессора на совместимость с C95

[ редактировать ]
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L

/* C95 compatible source code. */
#elif defined(__STDC__)
/* C89 compatible source code. */
#endif

В марте 2000 года ANSI принял стандарт ISO/IEC 9899:1999. [10] Этот стандарт обычно обозначается как C99. Некоторые заметные дополнения к предыдущему стандарту включают в себя:

ISO для C99 опубликовало три технических исправления:

  • ИСО/МЭК 9899:1999/Кор 1:2001(Е)
  • ИСО/МЭК 9899:1999/Кор 2:2004(Е)
  • ISO/IEC 9899:1999/Cor 3:2007(E), отличающийся отказом от стандартной библиотечной функции, получает

Этот стандарт был отменен как ANSI/INCITS [11] и ИСО/МЭК [12] в пользу С11.

C11 был официально ратифицирован и опубликован 8 декабря 2011 года. Примечательные особенности включают улучшенную поддержку Unicode , выражения общего типа с использованием нового _Generic ключевое слово, кросс-платформенный многопоточный API ( threads.h), а атомарные типы поддерживаются как в основном языке, так и в библиотеке ( stdatomic.h).

ISO опубликовало одно техническое исправление для C11:

  • ИСО/МЭК 9899:2011/Кор 1:2012 [13]

По состоянию на октябрь 2018 г. , «C17» — текущий стандарт языка программирования C. [14]

C17 устраняет дефекты C11 без введения новых функций языка. [15]

C23 — неофициальное название следующей основной языка C. версии стандарта [16]

[ редактировать ]

В рамках процесса стандартизации ISO/IEC также публикует технические отчеты и спецификации, относящиеся к языку C:

  • ИСО/МЭК ТР 19769:2004, [17] о расширениях библиотеки для поддержки форматов преобразования Unicode, интегрированных в C11
  • ИСО/МЭК ТР 24731-1:2007, [18] о расширениях библиотеки для поддержки интерфейсов с проверкой границ, интегрированных в C11
  • ИСО/МЭК ТР 18037:2008, [19] о встроенных расширениях C
  • ИСО/МЭК ТР 24732:2009, [20] по десятичной арифметике с плавающей запятой, заменено ISO/IEC TS 18661-2:2015
  • ИСО/МЭК ТР 24747:2009, [21] о специальных математических функциях,
  • ИСО/МЭК ТР 24731-2:2010, [22] о расширениях библиотеки для поддержки функций динамического выделения
  • ИСО/МЭК ТС 17961:2013, [23] по безопасному кодированию на C
  • ИСО/МЭК ТС 18661-1:2014, [24] по IEC 60559:2011 - совместимая двоичная арифметика с плавающей запятой
  • ИСО/МЭК ТС 18661-2:2015, [25] с плавающей запятой , совместимой со стандартом IEC 60559:2011 на десятичной арифметике
  • ИСО/МЭК ТС 18661-3:2015, [26] на обмене, совместимом с IEC 60559:2011, и расширенных типах с плавающей запятой
  • ИСО/МЭК ТС 18661-4:2015, [27] дополнительные функции, совместимые с IEC 60559:2011

Другие технические спецификации находятся в стадии разработки и ожидают утверждения, включая пятую и последнюю часть TS 18661, спецификацию программной транзакционной памяти и расширения параллельной библиотеки. [28]

Поддержка со стороны основных компиляторов

[ редактировать ]

ANSI C сейчас поддерживается почти всеми широко используемыми компиляторами. GCC и Clang — два основных популярных сегодня компилятора C, оба основаны на C11 с обновлениями, включая изменения из более поздних спецификаций, таких как C17. [29] [30] Любой исходный код, написанный только на стандарте C и без каких-либо допущений, зависящих от оборудования, практически гарантированно будет корректно компилироваться на любой платформе с соответствующей реализацией C. Без таких мер предосторожности большинство программ могут компилироваться только на определенной платформе или с помощью определенного компилятора, например, из-за использования нестандартных библиотек, таких как библиотеки графического интерфейса , или из-за использования атрибутов, специфичных для компилятора или платформы. такие как точный размер определенных типов данных и порядок байтов .

Возможность обнаружения соответствия

[ редактировать ]

Чтобы смягчить различия между K&R C и стандартом ANSI C, __STDC__ Макрос («стандартный c») можно использовать для разделения кода на разделы ANSI и K&R.

 #if defined(__STDC__) && __STDC__
 extern int getopt(int, char * const *, const char *);
 #else
 extern int getopt();
 #endif

В приведенном выше примере прототип используется в объявлении функции для реализаций, совместимых с ANSI, тогда как в противном случае используется устаревшее объявление, не являющееся прототипом. Начиная с C99, они по-прежнему соответствуют ANSI. Обратите внимание, как этот код проверяет как определение, так и оценку: это связано с тем, что некоторые реализации могут устанавливать __STDC__ до нуля, что указывает на несоответствие ANSI. [31]

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

[ редактировать ]

Список компиляторов, поддерживающих ANSI C:

См. также

[ редактировать ]
  1. ^ Брэд Келечава (14 сентября 2017 г.). «Происхождение ANSI C и ISO C» . Проверено 14 августа 2018 г.
  2. ^ Ричард Хейл Шоу (13 сентября 1988 г.). «Стандарт C: проект ANSI растет» . Журнал ПК . Том. 7, нет. 15. С. 116–117 . Проверено 15 ноября 2022 г.
  3. ^ «Стандарты — использование коллекции компиляторов GNU (GCC)» . Проверено 24 июня 2012 г.
  4. ^ «ИНЦИТС/ИСО/МЭК 9899» . www.techstreet.com . Проверено 3 октября 2018 г.
  5. ^ «ISO/IEC 9899:1990 – Языки программирования – C» . Проверено 24 июня 2012 г.
  6. ^ Клайв Д. У. Физер (12 сентября 2010 г.). «Краткая характеристика Нормативного приложения 1» .
  7. ^ «ИСО/МЭК 9899:1990/Поправка 1:1995» . Международная организация по стандартизации. 22 марта 2013 г.
  8. ^ «ИСО/МЭК 9899:1990/Кор 1:1994» . ИСО . Проверено 21 января 2019 г.
  9. ^ «ИСО/МЭК 9899:1990/Кор 2:1996» . ИСО . Проверено 21 января 2019 г.
  10. ^ «ИСО/МЭК 9899:1999» . ИСО . Проверено 21 января 2019 г.
  11. ^ «ИНЦИТС/ИСО/МЭК 9899-2012» . АНСИ.
  12. ^ «ISO/IEC 9899:1999 – Языки программирования – C» . Проверено 24 июня 2012 г.
  13. ^ «ИСО/МЭК 9899:2011/Кор 1:2012» . Международная организация по стандартизации.
  14. ^ «ISO/IEC 9899:2018 – Информационные технологии. Языки программирования – C» . www.iso.org .
  15. ^ «Стандарт-С» . www.iso-9899.info .
  16. ^ «История Си» . cppreference .
  17. ^ «ИСО/МЭК ТР 19769:2004» . Международная организация по стандартизации.
  18. ^ «ИСО/МЭК ТР 24731-1:2007» . Международная организация по стандартизации.
  19. ^ «ИСО/МЭК ТР 18037:2008» . Международная организация по стандартизации.
  20. ^ «ИСО/МЭК ТР 24732:2009» . Международная организация по стандартизации.
  21. ^ «ИСО/МЭК ТР 24747:2009» . Международная организация по стандартизации.
  22. ^ «ИСО/МЭК ТР 24731-2:2010» . Международная организация по стандартизации.
  23. ^ «ИСО/МЭК ТС 17961:2013» . Международная организация по стандартизации.
  24. ^ «ИСО/МЭК ТС 18661-1:2014» . Международная организация по стандартизации.
  25. ^ «ИСО/МЭК ТС 18661-2:2015» . Международная организация по стандартизации.
  26. ^ «ИСО/МЭК ТС 18661-3:2015» . Международная организация по стандартизации.
  27. ^ «ИСО/МЭК ТС 18661-4:2015» . Международная организация по стандартизации.
  28. ^ «Экспериментальные функции C» . cppreference.com . Проверено 16 января 2016 г. .
  29. ^ «2 языковых стандарта, поддерживаемых GCC — язык 2.1 C» . Использование коллекции компиляторов GNU (GCC) . GCC, Коллекция компиляторов GNU . Проверено 5 февраля 2019 г.
  30. ^ «Языковая совместимость» . Интерфейс семейства языков Clang C для LLVM . Проверено 5 февраля 2019 г.
  31. ^ «Стандартные предопределенные имена макросов» . www.ibm.com . Проверено 10 апреля 2019 г.
  32. ^ «Пакет разработчика HP C/ANSI C» . Проверено 12 июля 2015 г.
  33. ^ Поддержка ISO C11 добавлена ​​в компиляторы IBM XL C/C++.
  34. ^ ссылка на страницы Пеллеса C

Дальнейшее чтение

[ редактировать ]
  • Шрайнер, Аксель-Тобиас (1993). Объектно-ориентированное программирование с использованием ANSI-C . Хансер. ISBN  3-446-17426-5 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 74bb6025d434116d67f30ee1f533d42a__1722496560
URL1:https://arc.ask3.ru/arc/aa/74/2a/74bb6025d434116d67f30ee1f533d42a.html
Заголовок, (Title) документа по адресу, URL1:
ANSI C - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)