Блок перевода на C и C++

Есть ли разница между тем, что такое модуль перевода в C++ и C?

В других статьях я читал, что заголовочный файл и исходный файл составляют единицу перевода, но может ли один исходный файл называться единицей перевода в C++, где он содержит все определения в одном файле?

5 ответов

Решение

Единица перевода не является "заголовком и исходным файлом". Он может включать в себя тысячу заголовочных файлов (и тысячу исходных файлов тоже).

Единица перевода - это просто то, что обычно называют "исходным файлом" или ".cpp файлом" после предварительной обработки. Если исходный файл #includeВ других файлах текст этих файлов включается препроцессором в модуль перевода. В этом вопросе нет никакой разницы между C и C++.

Заголовок добавляется в файл.cpp при предварительной обработке, поэтому компилятор в основном работает с большим фрагментом кода, содержащим как.cpp, так и весь.h, добавленный "#include".

Это переводческая единица.

Это зависит от того, что вы подразумеваете под "разницей". И C, и C++ определяют его одинаково: в основном, все, что компилируется при компиляции исходного файла (таким образом, все включенные заголовки, расширенные макросы и т. Д.). Но это не одно и то же в двух языках; такие вещи, как шаблоны, означают, что единицы перевода в C++ ведут себя иначе, чем в C. (Например, в C++ есть одно правило определения.)

Единица перевода - это фактически то, что вы получаете, когда исходный и заголовочный файлы прошли предварительную обработку (которая расширяет исходный код с использованием заголовочных файлов) и прекомпиляцию. Компилятор использует модуль перевода для создания файлов.obj, которые вы видите в выходной директории вашего компилятора.

Набор исходных файлов, видимых компилятором и переведенных как единое целое

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