Почему нет специального компилятора для c или c ++? - PullRequest
1 голос
/ 15 октября 2010

Кажется, что все компиляторы могут работать как с c, так и с ++, например, gcc, msvc ...

Это потому, что эти два языка очень похожи?

Ответы [ 10 ]

6 голосов
/ 15 октября 2010

На самом деле, GCC (GNU Compiler Collection) имеет два разных интерфейса: gcc и g++.Чтобы указать C ++, вы также можете использовать расширение .cpp (или несколько других) или -x c++ при выполнении gcc.Однако для этого требуются дополнительные параметры (например, ссылки в стандартной библиотеке C ++).

cl, компилятор Microsoft C ++, не поддерживает современный C. Однако он скомпилирует исходные файлы C как вариант C89,и вы можете указать это явно с помощью /TC.

Для обоих вы правы, что существует много общего кода, независимо от того, какой интерфейс используется (GCC также имеет много других).Тем не менее, языки имеют существенные различия, которые обсуждаются в других местах ( этот вопрос среди других).

4 голосов
/ 15 октября 2010

Нет выделенного компилятора для C / C ++, потому что такого языка нет ....

Если вы собираетесь писать компилятор C ++, то вам также понадобится компилировать C, поэтомуВы также можете предоставить один из них.

Тем не менее, могут существовать некоторые компиляторы C, которые не имеют с собой компилятор C ++.

3 голосов
/ 16 октября 2010

TCC является примером компилятора C, который не является компилятором C ++. На самом деле компиляция C ++ - огромная боль; единственная причина, по которой так много компиляторов C также поддерживают C ++, заключается в том, что существует довольно большой спрос на C ++.

3 голосов
/ 15 октября 2010

Семантика базовых языковых конструкций для C и C ++ остается более или менее идентичной, и C ++ был разработан для добавления структурных элементов в C, а не для изменения или удаления существующих возможностей языка.Поэтому, если вы столкнетесь с трудностями при создании компилятора C ++, его компиляция также будет относительно тривиальной (по крайней мере для ISO C90).C99 существенно отличается от C ++, и некоторые компиляторы C ++ либо не поддерживают C99, либо включают функции C99 в качестве расширений в свой компилятор C ++.

C ++ также хорошо взаимодействует с C, C ++, например, полностью включает ISOСтандартная библиотека C90, и может связать любую библиотеку C.Для библиотек C ++ может быть предоставлен интерфейс, совместимый с C-Linkage, для использования кодом C (хотя это часто не так просто, как C ++, вызывающий код C).

Ранние инструменты C ++ были не настоящими компиляторами, а скорее трансляторами C ++, которые генерировалиC-код для компиляции нативным C-компилятором.Comeau C ++ по-прежнему использует этот подход для поддержки C ++ для любой цели с помощью компилятора C, что полезно во встроенных средах, где некоторые цели плохо обслуживаются инструментами C ++.

3 голосов
/ 15 октября 2010

Нет. Это не правда. Посмотрите на Pelles , который является компилятором только на C.

1 голос
/ 16 октября 2010
1 голос
/ 15 октября 2010

C ++ является надмножеством C. Я не знаю, так ли это до сих пор, но по крайней мере раньше компиляторы c ++ преобразовывали код в C в качестве первого шага при компиляции.

Редактировать:

Я всегда слышал, что это суперсет.Поскольку GMan говорит «нет», я посмотрел Википедию, в которой говорится: «C ++ часто считается надмножеством C, но это не совсем так. [21] Большинство кодов C легко можно сделать для правильной компиляции в C ++, но естьнесколько различий, которые приводят к тому, что какой-то действительный код C недопустим в C ++ или ведет себя по-разному в C ++. "(Подробнее см. http://en.wikipedia.org/wiki/C%2B%2B.) Поэтому я немного исправлюсь.

Редактировать 2:

Я читал немного дальше в статье Википедии.Похоже, это более точно: C ++ начинался как C;C ++ эволюционировал путем добавления новых функций к C. В какой-то момент C ++ изменился достаточно, чтобы перестать быть просто надмножеством C. С тех пор C также эволюционировал, и теперь у него есть некоторые функции, которых нет в C ++.Так что они тесно связаны, но больше не полностью совместимы друг с другом.

0 голосов
/ 27 октября 2010

Это неправда, их несколько, и в 1980-х их было много, прежде чем начали появляться продукты компилятора C ++ :-) Однако, учитывая компилятор C ++, предельная стоимость производства компилятора C из той же кодовой базы относительно маленький, и даже переход в другую сторону не является существенным приростом, по крайней мере по сравнению с тем, начинающимся с нуля, с любым из них.

0 голосов
/ 16 октября 2010

В прошлый раз, когда я использовал его, пакет Labwindows / CVI от National Instruments был компилятором только на C.

0 голосов
/ 15 октября 2010
  • GCC имеет компоненты gcc и g ++, которые компилируют код C и C ++.
  • clang-llvm имеет интерфейс C. Существует экспериментальный, отдельный интерфейс C ++.
  • Visual Age от IBM разделена на компиляторы xlc и xlC.
  • Портативный компилятор C - только C.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...