В чем разница между терминами "исходный файл" и "единица перевода"?

В чем разница между исходным файлом и модулем перевода?

3 ответа

Решение

Из стандарта C++:

Исходный файл вместе со всеми заголовками и исходными файлами, включенными в директиву предварительной обработки #include, за исключением строки исходного кода, пропущенной любой из директив предварительной обработки условного включения, называется единицей перевода.

"Единица перевода" - это исходный файл плюс любые заголовки или другие исходные файлы, которые он включает, плюс любые файлы, которые ОНИ включают, и так далее. Исходный файл - это просто... один исходный файл.

Если это кому-нибудь поможет, подумайте об исходном файле как о "до" запуска препроцессора, а о модуле перевода - как "после". Или думайте об этом как о работе препроцессора по превращению исходного файла в модуль перевода.

Единица перевода является базовой единицей компиляции в C++. Это содержит:

  • все содержимое одного исходного файла после запуска препроцессора
  • содержимое любых заголовочных файлов, прямо или косвенно включенных им
  • минус любые строки игнорируются с помощью операторов условной предварительной обработки

Отдельный блок перевода компилируется в объектный файл, библиотеку или исполняемую программу.

Исходный файл, напротив, является отдельным файлом, как и любой другой файл в вашей файловой системе. После компиляции он может быть компонентом модуля перевода, как упоминалось выше.

Другие вопросы по тегам