Ohjelmointikielissä käännösyksikkö on suurin lähdetekstin lohko, joka voidaan fyysisesti kääntää (muuntaa sisäiseksi koneesitukseksi; erityisesti käännetty ). Tärkeä käsite C- ja C++-kielissä .
"Käännösyksikön" käsite ilmestyi ensimmäisten vuorovaikutteisten tietokoneiden yhteydessä: siihen aikaan muistin puute oli sellainen, että tietokone ei voinut pitää siinä kääntäjää, suuren ohjelman tekstiä ja tuloksena olevaa koodia samanaikaisesti. . Minun piti kääntää osissa ja sitten käyttää erityistä ohjelmaa - linkittäjä - koota suoritettava tiedosto käännetyistä moduuleista .
Nyt teksti on jaettu käännösyksiköihin ensisijaisesti koodin uudelleenkäytön vuoksi . Ja nykyaikaiset optimoivat kääntäjät ovat usein niin hitaita, että suuren ohjelman uudelleenrakentaminen voi viedä kymmeniä minuutteja.
C- ja C++ - ohjelmointikielissä käännösyksikkö on kääntäjän syötteeseen syötetty lähdeteksti (tiedosto, jonka tunniste on tai ) ja kaikki siihen sisältyvät tiedostot ..c.cpp
Toisin kuin monet muut ohjelmointikielet ( Pascal , Java , C# ), C:ssä käännösyksiköt käännetään erikseen ilman päällekkäisyyttä. Yksiköiden "telakoitumista" ohjelmaan valvoo yksinomaan linkkeri . C-ohjelmien kirjoittamiseen on kaksi tekniikkaa: "monet käännösyksiköt" ja "yksi käännösyksikkö".
Perinteinen tekniikka on ckääntää kukin -tiedosto erikseen, minkä jälkeen linkkeri kokoaa objektitiedostot suoritettavaksi tiedostoksi.
Tekniikka, jossa useita ctiedostoja ei yhdistetä linkittäjä vaan #include. Esimerkiksi:
// compile_me.cpp #include "foo.cpp" #include "bar.cpp" // foo.cpp #include <iostream> // Suuri vakiootsikko #include "bar.hpp" // Toiminnon otsikko "bar" int main () { baari (); } // bar.cpp #include <iostream> // Edelleen sama iso otsikko (ei sisällytetä toista kertaa!) voidbar ( ) { ... }Tällaisen rakenteen edut: koko kokoonpano nopeutuu, mahdollisten optimointien valikoima laajenee . Se yksinkertaistaa ulkomaisten kirjastojen mukauttamista eksoottisille kääntäjille (esimerkiksi Embarcadero C++ Builder -tilassa __fastcall) [1] . Miinus - pienillä muutoksilla koodissa koko ohjelma käännetään uudelleen.
Suuret avoimen lähdekoodin kirjastot (kuten SQLite ) julkaistaan usein yhtenä käännösyksikkönä. Samalla ne ohjelmoidaan "vanhanaikaiseen tapaan", valtavalla määrällä yksiköitä, ja ne siirretään tyypistä toiseen yksinkertaisella esiprosessorilla.