2011-01-24 12 views

Odpowiedz

14

Twój kod musi być zrozumiały dla maszyny, a ponieważ nie jest interpretowany ani uruchomiony w maszynie wirtualnej, jest najpierw przekształcany w zespole. Możesz uzyskać ten kod assemblera przy użyciu flagi -S w opcjach kompilacji g ++ (o ile oczywiście używasz g ++).

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

powinien załatwić sprawę.

16

Zdecydowana większość kompilatory C++ przekonwertuje ++ źródło C do plików obiektowych (kod maszynowy z wystarczającą ilością informacji sterującej być połączone do pliku wykonywalnego). Na przykład, musisz zrobić tak, aby uzyskać gcc, aby wygenerować kod zespołu (źródło ASM) przy użyciu flagi -s. Normalnie nigdy nie zobaczysz zespołu.

Ale standard C++ nie wymaga ostatecznego formularza, który jest wyprowadzany z kompilatora, tylko że kod musi zachowywać się w określony sposób po uruchomieniu.

W rzeczywistości najwcześniejsze kompilatory C++ faktycznie wygenerowały kod źródłowy C, a następnie skompilowały go.

Twój kompilator C++ może generować kod obiektowy, kod bajtowy Java, a nawet GWBASIC, jeśli czujesz się masochistycznie.

+1

Bardzo pouczające, tylko pytanie, jak skompilować kod C++ do kodu bajtowego Java? –

+2

Cóż, aby to zrobić, musisz napisać kompilator. Przykro mi, nie chciałem jednak sugerować, że są tam kompilatory, tylko że to możliwe i zgodne ze standardami, aby je napisać. – paxdiablo

+0

MSVC może kompilować do MSIL, który jest koncepcyjnie podobny do bajtów Java. – MSalters

Powiązane problemy