ANSI C

редактировать
Стандарты для языка программирования C.

ANSI C, ISO Cи Стандарт C- это последовательные стандарты для языка программирования C, опубликованные Американским национальным институтом стандартов (ANSI) и Международной организацией по стандартизации (ISO ). Исторически эти имена относились к исходной и наиболее поддерживаемой версии стандарта (известной как C89или C90). Разработчикам программного обеспечения, пишущим на C, рекомендуется соответствовать стандартам, поскольку это способствует переносимости между компиляторами.

Содержание

  • 1 История и перспективы
    • 1.1 C89
    • 1.2 C90
    • 1.3 C95
      • 1.3.1 Тест препроцессора на совместимость с C95
    • 1.4 C99
    • 1.5 C11
    • 1.6 C18
    • 1.7 C2x
    • 1.8 Другие соответствующие публикации ISO
  • 2 Поддержка основных компиляторов
    • 2.1 Обнаружение соответствия
  • 3 Компиляторы, поддерживающие ANSI C
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература
  • 7 Внешние ссылки

История и перспективы

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

C89

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

C90

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

Этот стандарт был отменен как ANSI / INCITS, так и ISO / IEC.

C95

В 1995 году ISO опубликовал расширение, названное Поправка 1 к стандарту ANSI-C. Его полное название было ISO / IEC 9899: 1990 / AMD1: 1995 или прозвище C95. Помимо исправления ошибок, были внесены дополнительные изменения в языковые возможности, такие как:

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

  • ISO / IEC 9899: 1990 / Cor 1: 1994 TCOR1 в 1994
  • ISO / IEC 9899: 1990 / Cor 2: 1996 в 1996

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

#if defined (__ STDC_VERSION__) && __STDC_VERSION__>= 199409L / * C95 совместимый исходный код. * / #elif defined (__ STDC__) / * Исходный код, совместимый с C89. * / #endif

C99

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

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

Этот стандарт был отменен как ANSI / INCITS, так и ISO / IEC в пользу C11.

C11

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

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

  • ISO / IEC 9899: 2011 / Cor 1: 2012

C18

По состоянию на октябрь 2018 года «C18» является текущий стандарт для языка программирования C.

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

C2x

C2x - неофициальное название для следующая (после C18 ) основная стандартная версия языка C. Голосование не ожидается до 2021 года.

Другие связанные публикации ISO

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

  • ISO / IEC TR 19769: 2004, о расширениях библиотеки для поддержки форматов преобразования Unicode, интегрирован в C11
  • ISO / IEC TR 24731-1: 2007, о расширениях библиотеки для поддержки проверки границ интерфейсы, интегрированные в C11
  • ISO / IEC TR 18037: 2008, на встроенных расширениях C
  • ISO / IEC TR 24732: 2009, на десятичной с плавающей запятой арифметика, заменены согласно ISO / IEC TS 18661-2: 2015
  • ISO / IEC TR 24747: 2009, по специальным математическим функциям,
  • ISO / IEC TR 24731-2: 2010, по расширениям библиотеки для поддержки функции динамического распределения
  • ISO / IEC TS 17961: 2013, по безопасному кодированию в C
  • ISO / IEC TS 18661-1: 2014, по IEC 60559: 2011 - совместимая двоичная арифметика с плавающей запятой
  • ISO / IEC TS 18661-2: 2015, на IEC 60559: 2011-compat ible десятичное число с плавающей запятой арифметическое
  • ISO / IEC TS 18661-3: 2015, обмен, совместимый с IEC 60559: 2011, и расширенные типы с плавающей запятой
  • ISO / IEC TS 18661-4: 2015, о дополнительных функциях, совместимых с IEC 60559: 2011

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

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

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

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

Для уменьшения различий между 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-совместимых реализаций, в то время как устаревшее объявление не-прототипа используется в противном случае. Они по-прежнему соответствуют требованиям ANSI, начиная с C99. Обратите внимание, как этот код проверяет как определение, так и оценку: это связано с тем, что некоторые реализации могут устанавливать __STDC__равным нулю, чтобы указать на несоответствие ANSI.

Компиляторы, поддерживающие ANSI C

См. Также

  • Портал компьютерного программирования

Список литературы

  1. ^ Брэд Келечава (2017-09-14). «Происхождение ANSI C и ISO C». Проверено 14 августа 2018 г.
  2. ^ «Стандарты - Использование коллекции компиляторов GNU (GCC)». Проверено 24 июня 2012 г.
  3. ^ "INCITS / ISO / IEC 9899". www.techstreet.com. Проверено 3 октября 2018 г.
  4. ^ «ISO / IEC 9899: 1990 - Языки программирования - C». Проверено 24 июня 2012.
  5. ^ Clive D.W. Перо (12.09.2010). «Краткое описание нормативного дополнения 1».
  6. ^ «ISO / IEC 9899: 1990 / Amd 1: 1995». Международная Организация Стандартизации. 2013-03-22.
  7. ^ «ISO / IEC 9899: 1990 / Cor 1: 1994». ISO. Проверено 21 января 2019 г.
  8. ^ «ISO / IEC 9899: 1990 / Cor 2: 1996». ISO. Проверено 21 января 2019.
  9. ^ 14: 00-17: 00. «ИСО / МЭК 9899: 1999». ISO. Проверено 21 января 2019 г.CS1 maint: числовые имена: список авторов (ссылка )
  10. ^ «INCITS / ISO / IEC 9899-2012». ANSI.
  11. ^ »ISO / IEC 9899 : 1999 - Языки программирования - C ". Проверено 2012-06-24.
  12. ^ " ISO / IEC 9899: 2011 / Cor 1: 2012 ". Международная организация по стандартизации.
  13. ^ " ISO / IEC 9899: 2018 - Информационные технологии - Языки программирования - C ". Www.iso.org.
  14. ^ " Стандарт - C ". Www.iso-9899.info.
  15. ^ «История C». Cppreference.
  16. ^ Майкл Ларабель (2018-10-18). «Компилятор GCC 9 добавляет -std = c2x и -std = gnu2x для будущего обновления языка C».
  17. ^ «ISO / IEC TR 19769: 2004». Международная организация по стандартизации.
  18. ^ «ISO / IEC TR 24731-1: 2007». Международная организация по стандартизации.
  19. ^ «ISO / IEC TR 18037 : 2008 ". Международная организация по стандартизации.
  20. ^ " ISO / IEC TR 24732: 2009 ". Международная организация по стандартизации.
  21. ^ " ISO / IEC TR 24747: 2009 ". Международный Организация по стандартизации.
  22. ^ «ISO / IEC TR 24731-2: 2010». Международная организация по стандартизации.
  23. ^ «ISO / IEC TS 17961: 2013». Международная организация по стандартизации.
  24. ^ «ISO / IEC TS 18661-1: 2014». Международная организация по стандартизации.
  25. ^ «ISO / IEC TS 18661-2: 2015». Международная организация по стандартизации.
  26. ^ «ISO / IEC TS 18661-3: 2015». Международная организация по стандартизации.
  27. ^ «ISO / IEC TS 18661-4: 2015». Международная организация по стандартизации.
  28. ^ См. Список на https://en.cppreference.com/w/c/experimental Посещено 16 января 2016 года.
  29. ^ «Использование коллекции компиляторов GNU (GCC) : Стандарты ". gcc.gnu.org. Проверено 5 февраля 2019 г.
  30. ^ "Language Compatibility". clang.llvm.org. Проверено 5 февраля 2019 г.
  31. ^ «Стандартные предопределенные имена макросов». www.ibm.com. Проверено 10 апреля 2019 г.
  32. ^ «Пакет разработчика HP C / ANSI C». Проверено 12 июля 2015 г.
  33. ^ Добавлена ​​поддержка ISO C11 в компиляторы IBM XL C / C ++.
  34. ^ Ссылка на страницы Pelles C

Дополнительная литература

Внешние ссылки

Последняя правка сделана 2021-06-07 21:57:28
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте