Překladová jednotka (programování) - Translation unit (programming)
tento článek potřebuje další citace pro ověření.Říjen 2015) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
v C a C ++ terminologie programovacího jazyka, a překladová jednotka je konečným vstupem do C nebo C ++ překladač ze kterého soubor objektu je generován.[1] V běžném používání se někdy označuje jako a kompilační jednotka. Překladová jednotka zhruba sestává z a zdrojový soubor poté, co byla zpracována C preprocesor, znamenající, že hlavičkové soubory uvedené v #zahrnout
směrnice jsou doslova zahrnuta, části kódu uvnitř #ifndef
mohou být zahrnuty a makra byla rozšířena.
Kontext
Program C se skládá z Jednotky volala zdrojové soubory (nebo předzpracování souborů), který kromě zdrojového kódu obsahuje směrnice pro C preprocesor. Překladová jednotka je výstup preprocesoru C - zdrojový soubor poté, co byl předzpracováno.
Předběžné zpracování spočívá zejména v rozšíření zdrojového souboru, aby se rekurzivně nahradily všechny #zahrnout
direktivy s doslovným souborem deklarovaným ve směrnici (obvykle hlavičkové soubory, ale možná i další zdrojové soubory); výsledkem tohoto kroku je a překladová jednotka pro předběžné zpracování. Další kroky zahrnují makro expanze z #definovat
směrnice a podmíněná kompilace z #ifdef
směrnice, mimo jiné; to překládá překladovou jednotku předzpracování na a překladová jednotka. Z překladové jednotky kompilátor vygeneruje soubor objektu, které lze dále zpracovat a propojeno (případně s jinými soubory objektů) k vytvoření souboru spustitelný program.
Všimněte si, že preprocesor je v zásadě jazykově agnostický a je a lexikální preprocesor, pracující v lexikální analýza úroveň - neprovádí 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í záhlaví.
Rozsah
Překladové jednotky definují a rozsah zhruba rozsah souboru a funguje podobně jako rozsah modulu; v terminologii C se to označuje jako vnitřní propojení, což je jedna ze dvou forem vazba 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 říká, že mají vnitřní propojení - nejsou viditelné pro linkera - nebo mohou být viditelné pro další soubory objektů, v takovém případě se říká, že mají externí propojení, a jsou viditelné pro linkera.
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 projektu je obvykle uložena v souborech s a .C
přípona (nebo .cpp
, .cxx
nebo .cc
pro C ++, z toho .cpp
se používá nejvíce konvenčně). Soubory určené k zahrnutí mají obvykle a .h
přípona ( .hpp
nebo .hh
jsou také používány pro C ++, ale .h
je nejběžnější i pro C ++) a obecně neobsahují definice funkcí nebo proměnných, aby nedocházelo ke konfliktům názvů, pokud jsou hlavičky zahrnuty do více zdrojových souborů, jak tomu často bývá. Soubory záhlaví mohou být a často jsou zahrnuty v jiných souborech záhlaví. Je to standardní postup pro všechny .C
soubory v projektu tak, aby obsahovaly alespoň jeden .h
soubor.