Překladová jednotka (programování) - Translation unit (programming)

V terminologii programovacího jazyka C a C ++ je překladová jednotka (nebo neformálně kompilační jednotka) konečným vstupem do kompilátoru C nebo C ++, ze kterého je generován soubor objektu . Překladová jednotka zhruba sestává ze zdrojového souboru poté, co byl zpracován preprocesorem C , což znamená, že hlavičkové soubory uvedené ve #include směrnicích jsou doslova zahrnuty , #ifndef mohou být zahrnuty části kódu uvnitř a makra byla rozšířena.

Kontext

AC program se skládá z jednotek nazývaných zdrojové soubory (nebo předzpracování soubory ), které, kromě zdrojového kódu, obsahuje pokyny pro C preprocesor . Překladová jednotka je výstupem preprocesoru C - zdrojového souboru poté, co byl předem zpracován .

Předběžné zpracování spočívá zejména v rozšíření zdrojového souboru tak, aby rekurzivně nahradil všechny #include direktivy doslovným souborem deklarovaným ve směrnici (obvykle záhlaví , ale možná i jiné zdrojové soubory); výsledkem tohoto kroku je překladová jednotka předzpracování . Další kroky zahrnují makroexpanze z #define směrnic a podmíněné kompilace z #ifdef směrnic, mezi ostatními; to překládá překladovou jednotku předzpracování na překladovou jednotku . Z překladové jednotky kompilátor vygeneruje soubor objektu , který lze dále zpracovat a propojit (případně s jinými soubory objektu) za účelem vytvoření spustitelného programu .

Všimněte si, že preprocesor je v zásadě jazykově agnostický a je lexikálním preprocesorem pracujícím na úrovni lexikální analýzy - neprovádí syntaktickou analýzu, a proto není schopen provádět žádné zpracování specifické pro syntaxi C. Vstupem do kompilátoru je překladová jednotka, a proto nevidí žádné direktivy preprocesoru, které byly všechny zpracovány před spuštěním kompilace. Zatímco daná překladová jednotka je v zásadě založena na souboru, skutečný zdrojový kód vložený do kompilátoru se může zdát podstatně odlišný od zdrojového souboru, který programátor zobrazuje, zejména kvůli rekurzivnímu zahrnutí hlaviček.

Rozsah

Překladové jednotky definují rozsah , zhruba rozsah souboru a fungují podobně jako rozsah modulu ; v terminologii C se to nazývá interní vazba , což je jedna ze dvou forem vazby v C. Názvy (funkce a proměnné) deklarované mimo funkční blok mohou být viditelné buď pouze v rámci dané překladové jednotky, v takovém případě se se říká, že mají vnitřní propojení - nejsou viditelné pro linker - nebo mohou být viditelné pro jiné soubory objektů, v takovém případě se říká, že mají externí propojení a jsou viditelné pro linker.

C nemá pojem modulů. Samostatné soubory objektů (a tedy také překladové jednotky používané k výrobě souborů objektů) však fungují podobně jako samostatné moduly, a pokud zdrojový soubor neobsahuje další zdrojové soubory, může být vnitřní propojení (rozsah překladové jednotky) považováno za „soubor rozsah, včetně všech hlavičkových souborů ".

Organizace kódu

Převážná část kódu na projekt je obvykle držen v soubory s .c příponou (nebo .cpp , .cxx nebo .cc pro C ++ , který .cpp se používá nejvíce konvenčně). Soubory, které mají být zahrnuty, mají obvykle .h příponu ( .hpp nebo .hh se také používají pro C ++, ale .h jsou nejběžnější i pro C ++) a obecně neobsahují definice funkcí nebo proměnných, aby nedocházelo ke konfliktům názvů, když jsou hlavičky zahrnuty do více zdrojových souborů, jako je často případ. Soubory záhlaví mohou být a často jsou zahrnuty v jiných souborech záhlaví. Je standardní praxí, aby všechny .c soubory v projektu obsahovaly alespoň jeden .h soubor.

Viz také

Reference