Все компиляторы C++ генерируют код C?

Вероятно, довольно неопределенный и широкий вопрос, но все компиляторы C++ компилирует код в C сначала прежде, чем скомпилировать их в машинный код?

8
задан Rob Kennedy 22 July 2010 в 17:56
поделиться

4 ответа

Поскольку компиляторы C почти повсеместны и доступны почти на всех платформах, многие (скомпилированные) языки проходят эту фазу в своей разработке для начальной загрузки процесса.

На ранних этапах разработки языка, чтобы увидеть, возможен ли язык, самый простой способ получить работающий компилятор - это создать компилятор, который преобразует ваш язык в C, а затем позволить собственному компилятору C построить фактический двоичный файл.

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

C ++ прошел этапы 1 и 2 более двух десятилетий назад. Таким образом, легко найти "внешний интерфейс" компилятора, который предназначен для C ++ и генерирует промежуточный формат, который передается непосредственно в резервную копию. Но вы все равно можете найти версии C ++, которые переведены на C (как промежуточный формат) перед компиляцией.

14
ответ дан 5 December 2019 в 05:55
поделиться

Нет. C ++ -> C использовался только на самых ранних этапах развития и эволюции C ++. Большинство компиляторов C ++ сегодня компилируются непосредственно в ассемблерный или машинный код. Например, Borland C ++ компилируется непосредственно в машинный код.

6
ответ дан 5 December 2019 в 05:55
поделиться

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

Сегодня единственным известным мне компилятором C++, который создает код на языке C, является Comeau. Возможно, есть еще один или два для встраиваемых целей, но это определенно не мейнстрим.

2
ответ дан 5 December 2019 в 05:55
поделиться

Нет. GCC, например, идет с C ++ -> ассемблер. Вы можете увидеть это, используя параметр -S с g ++.

На самом деле, теперь, когда я думаю об этом, я не думаю , что какой-либо современный компилятор переходит на C до ASM.

9
ответ дан 5 December 2019 в 05:55
поделиться