В чем разница между терминами "исходный файл" и "единица перевода"?
В чем разница между исходным файлом и модулем перевода?
3 ответа
Из стандарта C++:
Исходный файл вместе со всеми заголовками и исходными файлами, включенными в директиву предварительной обработки #include, за исключением строки исходного кода, пропущенной любой из директив предварительной обработки условного включения, называется единицей перевода.
"Единица перевода" - это исходный файл плюс любые заголовки или другие исходные файлы, которые он включает, плюс любые файлы, которые ОНИ включают, и так далее. Исходный файл - это просто... один исходный файл.
Если это кому-нибудь поможет, подумайте об исходном файле как о "до" запуска препроцессора, а о модуле перевода - как "после". Или думайте об этом как о работе препроцессора по превращению исходного файла в модуль перевода.
Единица перевода является базовой единицей компиляции в C++. Это содержит:
- все содержимое одного исходного файла после запуска препроцессора
- содержимое любых заголовочных файлов, прямо или косвенно включенных им
- минус любые строки игнорируются с помощью операторов условной предварительной обработки
Отдельный блок перевода компилируется в объектный файл, библиотеку или исполняемую программу.
Исходный файл, напротив, является отдельным файлом, как и любой другой файл в вашей файловой системе. После компиляции он может быть компонентом модуля перевода, как упоминалось выше.