Sdílet prostřednictvím


Fáze převodu

Programy jazyků C a C++ se skládají z jednoho nebo více zdrojových souborů, z nichž každý obsahuje část textu programu. Zdrojový soubor společně s jeho soubory include, soubory, které jsou zahrnuty pomocí #include direktivy preprocesoru, ale neobsahují oddíly kódu odebrané direktivami podmíněné kompilace, jako #ifje například , se nazývá jednotka překladu.

Zdrojové soubory je možné přeložit v různých časech. Ve skutečnosti je běžné překládat jenom zastaralé soubory. Přeložené jednotky překladu mohou být zpracovány do souborů samostatného objektu nebo do knihoven kódu objektu. Tyto samostatné přeložené jednotky překladu jsou následně propojeny pro utvoření spustitelného programu nebo dynamické knihovny (DLL). Další informace o souborech, které lze použít jako vstup do linkeru, naleznete v tématu Vstupní soubory LINK.

Jednotky překladu mohou komunikovat pomocí:

  • Volání funkcí, které mají vnější propojení.

  • Volání funkcí členských tříd, které mají vnější propojení.

  • Přímých úprav objektů, které mají vnější propojení.

  • Přímých úprav souborů.

  • Meziprocesové komunikace (pouze pro aplikace založené na operačním systému Microsoft Windows).

Následující seznam popisuje fáze, ve kterých kompilátor překládá soubory:

Mapování znaků
Znaky jsou ve zdrojovém souboru mapovány na reprezentaci vnitřního zdroje. Sekvence trigraph jsou v této fázi převedeny na vnitřní reprezentaci jedním znakem.

Splicing řádků
Všechny řádky končící zpětným lomítkem (\) bezprostředně následované znakem nového řádku jsou spojené s dalším řádkem ve zdrojovém souboru, který tvoří logické čáry z fyzických řádků. Pokud není prázdný, musí zdrojový soubor končit znakem nového řádku, kterému předchází zpětné lomítko.

Tokenizace
Zdrojový soubor je rozdělen do předzpracovaných tokenů a prázdných znaků. Komentáře ve zdrojovém souboru jsou nahrazeny každý jednou mezerou. Jsou zachovány znaky nového řádku.

Předzpracování
Direktivy předběžného zpracování jsou vykonány a makra jsou rozbalena do zdrojového souboru. Příkaz #include vyvolá na jakémkoli textu překlad začínající od předchozích tří kroků.

Mapování znakové sady
Všechny členy zdrojové znakové sady a řídicí sekvence jsou ve znakové sadě spuštění převedeny na jejich ekvivalence. U jazyků Microsoft C a C++ jsou znakové sady spuštění a zdrojové znakové sady ASCII.

Zřetězení řetězců
Všechny sousední řetězce a literály širokých řetězců jsou zřetězeny. Například "String " "concatenation" se stane "String concatenation".

Překlad
Všechny tokeny jsou analyzovány syntakticky a sémanticky. Tyto tokeny jsou převedeny na kód objektu.

Propojení
Všechny externí odkazy jsou využity pro vytvoření spustitelného programu nebo dynamické knihovny DLL.

Kompilátor vytváří varování nebo chyby v průběhu fází překladu, ve kterých narazí na chyby syntaxe.

Linker řeší všechny externí odkazy a vytvoří spustitelný program nebo knihovnu DLL spojením jedné nebo více samostatně zpracovaných jednotek překladu spolu se standardními knihovnami.

Viz také

Preprocesor