Fáze posunutí
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, spolu s jeho soubory zahrnutí (soubory, které jsou zahrnuty pomocí direktivy preprocesoru #include) s výjimkou částí kódu odebraných pomocí direktiv podmíněné kompilace, jako je #if, se nazývá "jednotka překladu".
Zdrojové soubory lze přeložit v různých časech. Ve skutečnosti je běžné překládat pouze 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 propojovacího programu 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 prostředku.Sekvence trigraph jsou v této fázi převedeny na vnitřní reprezentaci jedním znakem.Spojování řádků
Všechny řádky, které končí lomítkem (\) a jsou ihned následovány znakem pro nový řádek, jsou spojeny s dalším řádkem ve zdrojovém souboru, což z fyzických řádků tvoří logické řádky.Zdrojový soubor, pokud není prázdný, musí končit znakem pro nový řádek, který není za znakem zpětného lomítka.Tokenizace
Zdrojový soubor je rozdělen do předzpracovaných tokenů a prázdných znaků.Komentáře ve zdrojovém souboru jsou každý nahrazen jednou mezerou.Jsou zachovány znaky nového řádku.Předběžné zpracová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šichni členové zdrojové znakové sady a řídící sekvence jsou ve znakové sadě spuštění převedení 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 změní na "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.
Propojovací program ř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.