2011-01-24 4 views

ответ

14

Ваш код должен быть понят машиной и, поскольку он не интерпретируется и не запускается в виртуальной машине, он сначала преобразуется в сборку. Этот код сборки можно получить с помощью флага -S в ваших параметрах компиляции g ++ (если вы используете g ++, конечно).

g++ -S -o file.s file.cpp 

должен сделать трюк.

3

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

С помощью gcc вы можете добавить -S для компиляции в файл .asm.

Для визуального студии см http://codegem.org/2008/10/generate-assembly-from-c-code-in-visual-studio

16

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

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

На самом деле, самые ранние компиляторы C++ фактически сгенерировали исходный код C и затем скомпилировали это.

Возможно, ваш компилятор C++ сгенерирует объектный код, байт-код Java или даже GWBASIC, если вы чувствуете мазохистство.

+1

Очень информативно, просто вопрос, как скомпилировать код на C++ для байт-кода Java? –

+2

Ну, вам нужно написать компилятор, чтобы сделать это. Извините, я не хотел подразумевать, что там были компиляторы, просто чтобы это было возможно и соответствовало стандартам, чтобы написать их. – paxdiablo

+0

MSVC может скомпилировать MSIL, что концептуально похоже на байт-коды Java. – MSalters

Смежные вопросы