Это, наверное, глупый вопрос, но я давно об этом задумывался. Имеет ли C (или любой другой язык низкого уровня), даже источник, или компилятор является частью, которая "выполняет всю работу", включая синтаксический анализ? Если да, не могли ли разные компиляторы иметь разные диалекты C? Где фактор stdlib в этом? Мне бы очень хотелось узнать, как это работает.
Является C открытым исходным кодом?
Ответ 1
Язык C не является частью программного обеспечения, а определенным стандартом, поэтому нельзя сказать, что он с открытым исходным кодом, а скорее что это открытый стандарт.
Однако существуют разные разработчики Gazillion для C, и многие из них действительно являются open-source. Наиболее примечательным примером является компилятор GCC C, который находится под GNU General Public License (GPL), лицензия с открытым исходным кодом.
Есть больше вариантов. Watcom является открытым исходным кодом, например. Нет недостатка в компиляторах с открытым исходным кодом C, но, без сомнения, наиболее распространенным, по крайней мере, в мире, отличном от Windows, является GCC.
В Windows лучше всего использовать Watcom или GCC с помощью Cygwin или MinGW.
Ответ 2
C - стандарт, который указывает, как компиляторы C должны генерировать программы.
Сам C не имеет никакого исходного кода, точно так же, как музыкальная нота не имеет пластика.
Некоторые компиляторы C, такие как GCC, являются открытыми.
Ответ 3
C - это просто язык, а также стандартизированный. В значительной степени это компилятор, который "выполняет всю работу". У разных компиляторов были разные диалекты; перед стандартом ANSI C99 у вас были такие вещи, как Borland C и другие конкурирующие компиляторы, которые реализовали язык C своими фантастическими способами.
stdlib
- это всего лишь согласованный набор стандартных библиотек, которые должны присутствовать в любой реализации ANSI C.
Ответ 4
Чтобы добавить другие замечательные ответы:
Что касается разных диалектов - есть дополнительные возможности, добавленные в C, которые специфичны для компилятора. Вы можете указать флаг командной строки -std=...
на gcc, чтобы указать стандарт C, который вы хотите использовать, каждый из которых имеет небольшие вариации/дополнения к синтаксису, наиболее распространенным, вероятно, является c99
.
Каждый компилятор имеет тенденцию реализовывать несколько разных дополнений, например, typeof()
не находится в стандарте C, поэтому компиляторам не нужно это реализовывать, но тем не менее это полезно, и большинство компиляторов его предоставляют. Вот список расширений gcc C
stdlib - это набор функций, указанных в стандарте C. Подобно компиляторам, stdlib может иметь разные реализации. Реализация GNU является открытым исходным кодом, как и gcc, но существуют другие компиляторы и могут быть другими реализациями stdlib, которые являются закрытыми источниками.
Ответ 5
Компилятор определит все сопоставления с C на сборку и т.д.... но насколько кто-то владеет им..... никто действительно не владеет C, однако ANSI/ISO определяет стандарты
Ответ 6
Компилятор GCC C написан на C. Таким образом, мы знаем, что есть не менее один компилятор C, написанный на C.
GNU stdlib
(glibc) также записывается в C (stdio.h, stdlib.h). Но в нем также есть некоторые части, написанные на ассемблере.
Ответ 7
Хороший вопрос. Существует способ определить языковой стандарт (а не реализацию!) в форме "исходного кода" на строгом и недвусмысленном языке, К сожалению, все старые языки, включая C, плохо определены. Но все же можно перевести эти определения в форму исходного кода.
Другой подход - определить язык с помощью оперативной семантики, часто в форме простой (и неэффективной) эталонной реализации.
Ответ 8
Хельги Храфн Гуннарссон написал главный ответ, но я подумал, что стоит отметить, что вы тоже можете закончить диалектами.
Компиляторы должны делать то же самое в отношении того, какой стандарт они поддерживают (который в наши дни должен быть практически такой же), но есть серые области. Способ работы компиляторов для функции undefined. Если спецификация C говорит о том, что поведение undefined для конкретного случая, то компилятор может сделать в значительной степени то, что он хочет.
Также есть примеры функций, добавленных в библиотеки (и новые библиотеки, добавленные) создателями компилятора для поддержки определенных характеристик платформы, создания конкурентного преимущества или просто для облегчения жизни. Циничный может предположить, что некоторые из них добавлены, чтобы помочь заблокировать людей в конкретном компиляторе.
Ответ 9
Я бы сказал, что C как язык не является открытым исходным кодом. Как отмечают многие, вы можете бесплатно скачать лицензированные компиляторы и библиотеки GNU, но если вы хотите написать свой собственный компилятор C, вам нужно будет следовать стандартам ISO C, а ISO - за наличные деньги за спецификацию языка C, который на момент публикации составляет 178 долларов США. Так что действительно ответ зависит от того, какие элементы вы заинтересованы в том, чтобы быть свободным и открытым исходным кодом.