В чем разница между 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 95

5 ответов:

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

  • первый стандарт C был выпущен 1989 национально в США, их национальным стандартным институтом ANSI. Этот выпуск называется 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 годов это был "язык C".

  • в 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) и описанный в Кернигане и Ричи язык программирования C (второй издание.) ..." Не все программы для "больших" компьютеров, таких как ПК. Написание компилятора для вашего устройства стоит, и проверка затрат времени и $. ANSI C жив и здоров & жизнь в ваших встроенных / устройств реального времени.

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

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

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

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

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

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

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

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

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

даже если есть изменения в стандарте, трудно представить что они будут достаточно обширны, чтобы гарантировать новое издание. (Мы были даже готовы как-то справиться с в разделе 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.