У мовах програмування С та С++ одиниця трансляції () — файл сирців разом з усіма включеними в нього за допомогою директиви #include заголовними та сирцевими файлами і без рядків коду, що виключені за допомогою умовних директив препроцесора.ISO/IEC 14882:2011, 2.1 Separate translation.
Програма утворюється однією або кількома одиницями трансляції зкомпонованими разом. Одиниця трансляції, в свою чергу, утворюється з послідовності оголошень: translation-unit: declaration-seqopt На відміну від інших мов програмування (Паскаль, Java, C#), в Сі кожен з c-файлів — «річ в собі», яка не залежить від інших c-файлів. Тільки після того, як файли будуть відкомпільованими, компонувальник збере їх в єдину програму.
Множина одиниць трансляції
Традиційна техніка, при якій кожен c-файл компілюється окремо, після чого об'єктні файли збираються в виконуваний файл компонувальником.
Одна одиниця трансляції
Техніка, при якій кілька c-файлів об'єднуються не компонувальником, а за допомогою #include. Наприклад: // compile_me.cpp # include «foo.cpp» # include «bar.cpp» // foo.cpp # include <iostream> // Стандартний заголовок # include «bar.hpp» // Заголовок функції 'bar'
int main() { bar(); } // bar.cpp # include <iostream> // Той самий заголовок (другий раз підключений не буде!)
void bar() { ... }
Плюси такої структури: прискорюється повне складання, розширюється діапазон можливих оптимізацій. Мінус — при невеликих змінах в коді перекомпілюється вся програма.
Примітки
Див. також
Правило одного визначення