I programmeringssprog er en oversættelsesenhed den maksimale blok af kildetekst , der kan oversættes fysisk (konverteret til en intern maskinrepræsentation; især kompileret ). Et vigtigt koncept for C- og C++-sprogene .
Konceptet "oversættelsesenhed" dukkede op med de første interaktive computere: i de dage var manglen på hukommelse sådan, at computeren ikke kunne opbevare compileren, teksten til et stort program og den resulterende kode i den på samme tid . Jeg var nødt til at kompilere i dele og derefter bruge et specielt program - en linker - til at samle en eksekverbar fil fra de kompilerede moduler .
Nu er teksten opdelt i oversættelsesenheder primært af hensyn til kodegenbrug . Og moderne optimeringskompilere er ofte så langsomme, at genopbygning af et stort program kan tage snesevis af minutter.
I programmeringssprogene C og C++ er en oversættelsesenhed en kildetekst, der leveres til compilerens input (en fil med filtypenavnet eller ).c med .cppalle filerne inkluderet i den .
I modsætning til mange andre programmeringssprog ( Pascal , Java , C# ), i C kompileres oversættelsesenheder separat uden at overlappe hinanden. "Dokkingen" af enheder i programmet overvåges udelukkende af linkeren . Der er to teknologier til at skrive C-programmer: "mange oversættelsesenheder" og "enkelt oversættelsesenhed".
Den traditionelle teknik er at ckompilere hver -fil separat, hvorefter objektfilerne samles til en eksekverbar fil af linkeren.
En teknik, hvor flere c-filer kombineres ikke af linkeren, men af #include. For eksempel:
// compile_me.cpp #include "foo.cpp" #include "bar.cpp" // foo.cpp #include <iostream> // Stor standardoverskrift #include "bar.hpp" // Funktionsoverskrift 'bar' int main () { bar (); } // bar.cpp #include <iostream> // Stadig den samme store header (vil ikke blive inkluderet en anden gang!) voidbar ( ) { ... }Fordele ved en sådan struktur: den fulde samling accelereres, rækken af mulige optimeringer udvides . Det forenkler tilpasningen af udenlandske biblioteker til eksotiske compilere (for eksempel Embarcadero C++ Builder i tilstand __fastcall) [1] . Minus - med små ændringer i koden bliver hele programmet genkompileret.
Store open source-biblioteker (såsom SQLite ) udgives ofte som en enkelt oversættelsesenhed. Samtidig er de programmeret på "den gammeldags måde", med et enormt antal enheder, og de overføres fra en type til en anden med en simpel forprocessor.