Модуль перевода в C и С++
Есть ли разница между единицей перевода в С++ и C?
В других сообщениях я читал, что заголовок и исходный файл делают блок перевода, но
может ли исходный файл быть назван единицей перевода в С++, где он содержит все определения в одном файле?
Ответы
Ответ 1
Блок перевода не является "заголовком и исходным файлом". Он может включать в себя тысячи файлов заголовков (и тысячи исходных файлов).
Единица перевода - это просто то, что обычно называется "исходный файл" или ".cpp файл" после предварительной обработки. Если исходный файл #include
других файлов, текст этих файлов включается в блок трансляции препроцессором. Нет никакой разницы между C и С++ по этому вопросу.
Ответ 2
Заголовок заголовка добавляется в файл .cpp при предварительной обработке, поэтому компилятор в основном работает над большим фрагментом кода, содержащим как .cpp, так и все .h, добавленные с помощью "#include".
Это единица перевода.
Ответ 3
Это зависит от того, что вы подразумеваете под "разницей". И C и С++
определите его аналогично: в основном, все, что компилируется, когда вы
скомпилировать исходный файл (таким образом, все включенные заголовки, расширенные
макросы и т.д.). Но это не то же самое на двух языках;
такие вещи, как шаблоны, означают, что единицы перевода действуют по-разному
в С++, чем в C. (например, С++ имеет одно правило определения.)
Ответ 4
Единица перевода - это то, что вы получаете, когда исходные и заголовочные файлы прошли предварительную обработку (которая расширяет исходный код с использованием файлов заголовков) и прекомпиляции. Компилятор использует блок перевода для создания файлов .obj, которые вы видите в своем выходном каталоге компилятора.
Ответ 5
набор исходных файлов, просматриваемых компилятором и переведенный как единица