В чем разница между C, C99, ANSI C и GNU C?

Я начал практику программирования на codechef и были смущены разница между C и C99. Что означает C здесь? Это C89? Проверьте языки в нижней части это представить. Он содержит как C, так и C99.

Я нашел в интернете что-то под названием GNU C. Есть ли другой C для систем linux/unix? Соответствуют ли они стандартам C ANSI? Я также читал в некоторых местах "C99 strict". Что это?

существуют ли какие-либо другие стандарты использования C? Есть ли что-то под названием C 4.3.2 или это версия gcc в текущем использовании?

EDIT:

этой, этой, этой помогло. Я буду искать больше и редактировать то, что осталось без ответа.

Я не новичок в программировании. Я знаю, что язык Си. Я знаю, что существуют различные стандарты C от ANSI, такие как C89, C99 и С11.

5 ответов


  • все перед стандартизацией вообще вызвано "К&Р К", после знаменитой книги, С Деннисом Ричи, изобретателем языка С, в качестве одного из авторов. Это был "язык с" 1972-1989 годов.

  • первый стандарт К был выпущен 1989 национально в США, их институтом Анси национального стандарта. Этот выпуск называется C89 или ANSI-C. С 1989-1990 годов это был "язык C".

  • в год спустя, американский стандарт был принят на международном уровне и опубликованы ИСО (ISO 9899:1990). Этот выпуск называется C90. Технически это тот же стандарт, что и C89/ANSI-C. формально он заменил C89/ANSI-C, сделав их устаревшими. С 1990-1999 годов C90 был "языком C".

    обратите внимание, что с 1989 года ANSI не имеет ничего общего с языком C. Программисты, все еще говорящие о "ANSI C", как правило, понятия не имеют, что это значит. ISO "владеет" языком C, через стандарт ISO 9899.

  • в 1999 году стандарт C был пересмотрен, многое изменилось (ISO 9899: 1999). Эта версия стандарта называется C99. С 1999-2011 годов это был "язык с".

  • в 2011 году стандарт C был снова изменен (ISO 9899: 2011). Эта версия называется C11. Различные новые функции, такие как _Generic, _Static_assert и поддержка потоков были добавлены к языку. Обновление было много внимания на многоядерных, мульти-обработка и последовательность выражений. С 2011-2017 годов это был "язык Си".

  • в 2017 году C11 был пересмотрен и были решены различные отчеты о дефектах. Этот стандарт неофициально называется C17 и был выпущен как ISO 9899:2018. Она не содержит никаких новых функций, только исправления. Это текущая версия языка Си.


"C99 strict", вероятно, относится к настройке компилятора, заставляющей компилятор следовать стандарту письмо. Существует термин конформные реализации в стандарте C. По сути, это означает: "этот компилятор фактически правильно реализует язык C". Программы, которые правильно реализуют язык C, формально называются строго соответствующие программы.

"GNU C" может означать две вещи. Либо сам компилятор C, который входит в состав коллекции компиляторов GNU (GCC). Или это может означать нестандартную настройку по умолчанию, которую использует компилятор GCC C. Если вы компилируете с gcc program.c тогда вы не компилируете в соответствии со стандартом C, а скорее нестандартную настройку GNU, которую можно назвать "GNU C". Например, все ядро Linux сделано в нестандартном GNU C, а не в стандартном C.

если вы хотите скомпилировать свои программы в соответствии со стандартом C, вы должны ввести gcc -std=c99 -pedantic-errors. Замените c99 на c11, если ваша версия GCC поддерживает его.


Я должен ответить относительно ANSI C. Хотя ANSI ничего не сделал с ним, компиляторы все еще построены для него. Например, компилятор PIC XC16: "Компилятор является полностью проверенным компилятором, который соответствует ANSI C стандарт, определенный спецификацией ANSI (ANSI x3.159-1989) и описанный в Kernighan и Ritchie язык программирования C (второй издание.) ..." Не все программы для "больших" компьютеров, таких как ПК. Написание компилятора для вашего устройства стоит, и проверка затрат времени и $. ANSI C жив и здоров & жизнь в ваших встроенных / real-time устройств.


  • ANSI C : Первый язык C был стандартизирован телом под названием ANSI в 1989 году, поэтому он называется c89.

  • C99:
    с учетом требований разработчиков, в 1999-2000 годах в C99 (например, inline, boolean) были включены дополнительные ключевые слова и функции.. Добавлены функции артематической библиотеки с плавающей запятой)

  • GNU C: GNU-это unix-подобная операционная система (www.gnu.org) & где-то GNU проект нуждается в языке программирования C ++ на основе стандарта ANSI Си. GNU использует компилятор GCC (GNU Compiler Collection) для компиляции кода. Он имеет функцию библиотеки C, которая определяет системные вызовы, такие как malloc, calloc, exit...и т. д.

ANSI C-это стандарт, который используется или рецензируется другими стандартами.


В Дополнение К Lundin ответ

вот что Деннис Ричи должен сказать На Вопрос

" почему K&R не дождался окончательного, утвержденного стандарта ANSI перед написанием K&R 2nd edition?"

почему K&R не дождался окончательного, утвержденного стандарта ANSI перед написанием К&Р 2-е издание? Кажется, что эта книга будет только правильным стандартом для за несколько месяцев до этого supesceded окончательным стандартом ANSI. Я знаю что на этом позднем этапе, вероятно, будет мало серьезных изменений, но почему бы и нет подождите несколько месяцев и убедитесь, что вы получите его на 100% правильно, а не нужно почти сразу написать 3-е издание или устареть?

мы подумали, что было бы неплохо отметить 10-ю годовщину первого издания. Более серьезно, мы начали работать прошлым летом, потому что у нас был время и склонность, и это ... оказалось, что X3J11 приближался конец. В декабре и январе, по мере того как мы заканчивали, мы рассматривали стоит ли откладывать возможность важных изменений доставка, и (после обсуждения вопроса с издателем) решил, что ждать не стоит. P-H хотел этого, и оба Мы с Брайаном хотели исключить это из повестки дня.

даже если есть изменения в стандарте, трудно представить что они достаточно обширны, чтобы гарантировать новое издание. (Мы были даже готовы как-то справиться с в разделе noalias, если она продолжалась.) Мы готовы внести необходимые изменения в будущее печати, но есть основания надеяться, что они будут незначительными. X3J11 по члены очень хотят закончить, не удивляя людей, тоже; многие из них работают для компаний, которые готовят компиляторы ANSI, в конце концов.

Деннис Ритчи


этот вопрос не был тщательно обыскан в сети для ответа, в любом случае вы можете посмотреть на это :

  1. C является языком программирования общего назначения, первоначально разработанным Деннис Ричи между 1969 и 1973 годами в AT&T Bell Labs.
  2. C99-это стандарт языка C, опубликованный ISO и принятый ANSI примерно в 1999 году.
  3. GNU C - это просто расширение c89, в то время как некоторые функции c99 также добавлены,но в целом он отличается от стандарта c99 поэтому при компиляции в GCC, мы должны ввести -std=c99 которых уже упоминалось в других ответов.
  4. ANSI C последовательная серия стандартов выпущенных ANSI.