Подавляющее большинство компиляторов C ++ преобразует исходный код C ++ в объектные файлы (машинный код с достаточным количеством управляющей информации для связывания в исполняемый файл).Они могут фактически генерировать язык ассемблера как промежуточный шаг и даже использовать отдельный ассемблер для обработки исходного кода ассемблера, но вы, как правило, никогда этого не увидите.Например, вы действительно должны приложить все усилия, чтобы получить gcc
для генерации кода сборки (файл .s), используя флаг -S
.Обычно вы никогда не увидите сборку.
Но стандарт C ++ не предписывает окончательную форму, выводимую из компилятора, просто код должен вести себя определенным образом при запуске.
Фактически, самые ранние "компиляторы" C ++ фактически генерировали исходный код C и затем компилировали его.
Вы можете иметь свой компилятор C ++, генерирующий объектный код, байт-код Java или даже GWBASIC, если вычувство мазохизма.