Одиниця трансляції
У мовах програмування С та С++ одиниця трансляції (англ. 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()
{
...
}
Плюси такої структури: прискорюється повне складання, розширюється діапазон можливих оптимізацій. Мінус — при невеликих змінах в коді перекомпілюється вся програма.
Примітки
- ISO/IEC 14882:2011, 2.1 Separate translation.