У мовах програмування С та С++ одиниця трансляції (англ. translation unit) — файл сирців разом з усіма включеними в нього за допомогою директиви #include заголовними та сирцевими файлами і без рядків коду, що виключені за допомогою умовних директив препроцесора.[1]

Програма утворюється однією або кількома одиницями трансляції зкомпонованими разом. Одиниця трансляції, в свою чергу, утворюється з послідовності оголошень:

 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()
{
  ...
}

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

Примітки ред.

  1. ISO/IEC 14882:2011, 2.1 Separate translation.

Див. також ред.