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