A programozási nyelvekben a fordítási egység a forrásszöveg azon maximális blokkja , amely fizikailag lefordítható (belső gépi reprezentációvá alakítható; különösen lefordítható ). A C és C++ nyelv fontos fogalma .
A "fordítóegység" fogalma az első interaktív számítógépeknél jelent meg: akkoriban a memória hiánya olyan volt, hogy a számítógép nem tudta egyszerre tartani a fordítót, egy nagy program szövegét és a kapott kódot. . Részekre kellett fordítanom, majd egy speciális programmal - egy linkerrel - futtatható fájlt kellett összeállítani a lefordított modulokból .
Most a szöveg fordítási egységekre van osztva elsősorban a kód újrafelhasználása érdekében . A modern optimalizáló fordítók pedig gyakran olyan lassúak, hogy egy nagy program újraépítése több tíz percig is eltarthat.
A C és C++ programozási nyelvekben a fordítási egység egy forrásszöveg, amelyet a fordító bemenetére ( vagy kiterjesztésű fájlra ) adunk az összes benne lévő fájllal együtt. .c.cpp
Sok más programozási nyelvtől eltérően ( Pascal , Java , C# ) a C nyelvben a fordítási egységek külön-külön, átfedés nélkül állnak össze. Az egységek programba való "dokkolását" kizárólag a linker figyeli . Két technológia létezik a C programok írására: „sok fordítási egység” és „egy fordítási egység”.
A hagyományos technika az, chogy minden -fájlt külön fordítanak le, majd az objektumfájlokat a linker összeállítja végrehajtható fájllá.
Olyan technika, amelyben több cfájlt nem a linker, hanem a #include. Például:
// compile_me.cpp #include "foo.cpp" #include "bar.cpp" // foo.cpp #include <iostream> // Nagy szabványos fejléc #include "bar.hpp" // Függvényfejléc 'bar' int main () { bár (); } // bar.cpp #include <iostream> // Továbbra is ugyanaz a nagy fejléc (másodszor nem kerül bele!) üres sáv ( ) { ... }Egy ilyen szerkezet előnyei: felgyorsul a teljes összeszerelés, bővül a lehetséges optimalizációk köre . Leegyszerűsíti a külföldi könyvtárak adaptálását egzotikus fordítók számára (például az Embarcadero C++ Builder módban __fastcall) [1] . Mínusz - kis változtatásokkal a kódban a teljes program újrafordításra kerül.
A nagy nyílt forráskódú könyvtárakat (például az SQLite -t ) gyakran egyetlen fordítási egységként adják ki. Ugyanakkor "régi módon" programozzák őket, hatalmas számú egységgel, és egy egyszerű előfeldolgozóval átviszik egyik típusból a másikba.