Вероятно, довольно неопределенный и широкий вопрос, но все компиляторы C++ компилирует код в C сначала прежде, чем скомпилировать их в машинный код?
Поскольку компиляторы C почти повсеместны и доступны почти на всех платформах, многие (скомпилированные) языки проходят эту фазу в своей разработке для начальной загрузки процесса.
На ранних этапах разработки языка, чтобы увидеть, возможен ли язык, самый простой способ получить работающий компилятор - это создать компилятор, который преобразует ваш язык в C, а затем позволить собственному компилятору C построить фактический двоичный файл.
Проблема заключается в том, что конструкции, специфичные для языка, теряются и, таким образом, могут быть упущены потенциальные возможности для оптимизации, поэтому большинство языков на втором этапе получают свой собственный выделенный компилятор интерфейс
, который понимает специфичные для языка конструкции и может, таким образом, предоставить стратегии оптимизации, основанные на этих конструкциях.
C ++ прошел этапы 1 и 2 более двух десятилетий назад. Таким образом, легко найти "внешний интерфейс" компилятора, который предназначен для C ++ и генерирует промежуточный формат, который передается непосредственно в резервную копию. Но вы все равно можете найти версии C ++, которые переведены на C (как промежуточный формат) перед компиляцией.
Нет. C ++ -> C использовался только на самых ранних этапах развития и эволюции C ++. Большинство компиляторов C ++ сегодня компилируются непосредственно в ассемблерный или машинный код. Например, Borland C ++ компилируется непосредственно в машинный код.
Нет. Это миф, основанный на том, что очень ранняя версия работы Струструпа была имплицирована таким образом. Компиляторы C++ генерируют машинный код почти точно так же, как и компиляторы C.
Сегодня единственным известным мне компилятором C++, который создает код на языке C, является Comeau. Возможно, есть еще один или два для встраиваемых целей, но это определенно не мейнстрим.
Нет. GCC, например, идет с C ++ -> ассемблер. Вы можете увидеть это, используя параметр -S
с g ++.
На самом деле, теперь, когда я думаю об этом, я не думаю , что какой-либо современный компилятор переходит на C до ASM.