У мовах програмування С та С++ одиниця трансляції () — файл сирців разом з усіма включеними в нього за допомогою директиви #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() { ... }

Плюси такої структури: прискорюється повне складання, розширюється діапазон можливих оптимізацій. Мінус — при невеликих змінах в коді перекомпілюється вся програма.

Примітки

Див. також

Правило одного визначення