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