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

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

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

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

EDIT:

Это, Это, Это помогло. Я буду искать больше и редактировать вещи, которые остались без ответа.

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

Ответ 1

  • Все до стандартизации обычно называют "K & RC" после знаменитой книги

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

  • Через год американский стандарт был принят на международном уровне и опубликован ISO (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 год это был "язык С". Большинство компиляторов C по-прежнему следуют этой версии.

  • В 2011 году стандарт C снова был изменен (ISO 9899: 2011). Эта версия называется C11. В настоящее время это определение "языка C".


"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 поддерживает его.

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

В дополнение к Lundin Отвечать

Вот что Деннис Ричи должен Произнести Когда задано

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

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

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

     

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

     

Деннис Ричи

Ответ 5

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

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