Модуль перевода в C и С++

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

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

Ответ 1

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

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

Ответ 2

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

Это единица перевода.

Ответ 3

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

Ответ 4

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

Ответ 5

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