Что такое "единица перевода" в C++

В то время я читал "Эффективный C++", написанный Мейерсом и натолкнулся на термин "единица перевода".

Может ли кто-нибудь дать мне объяснение:

1) Что именно это

2) Когда я должен рассмотреть возможность его использования при программировании на C++

3) Если он связан только с C++ или может использоваться с другими языками программирования

Я мог бы уже использовать его, не зная термина....

11 ответов

Решение

Отсюда: ( обратная связь с машиной)

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

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

Понятие единицы перевода чаще всего упоминается в контексте правила единого определения и шаблонов.

Единицей перевода для всех намерений и целей является файл (.c/.cpp), после того как он завершен, включая все файлы заголовков.

http://msdn.microsoft.com/en-us/library/bxss3ska%28VS.80%29.aspx

Трудный вопрос, чтобы ответить окончательно. Стандарт C++ гласит:

Текст программы хранится в единицах, называемых исходными файлами в этом международном стандарте. Исходный файл вместе со всеми заголовками (17.4.1.2) и включенными исходными файлами (16.2) через директиву предварительной обработки #include, за исключением любых строк исходного текста, пропущенных любой из директив предварительной обработки условного включения (16.1), называется единицей перевода. [Примечание: не обязательно переводить все программы на C++ одновременно. ]

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

По поводу других ваших вопросов:

2) Когда я должен рассмотреть возможность его использования при программировании на C++

Вы не можете не учитывать это - единицы перевода являются основой программы на C++.

3) Если он связан только с C++ или может использоваться с другими языками программирования

Другие языки имеют сходные понятия, но их семантика будет немного отличаться. Например, большинство других языков не используют препроцессор.

Книга проясняет это достаточно. Когда Мейерс ссылается на "Единицу перевода", он имеет в виду файл исходного кода.

Единица перевода - это код, который передается компилятору. Как правило, это означает результат работы препроцессора в файле.c.

В дополнение к ODR, модуль перевода важен в определении безымянных пространств имен, который заменяет одно из старых применений "статического".

Я думаю, у меня все еще не хватает очков, чтобы добавить комментарий под верхним ответом.

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

Согласно MSDN: программы на C и C++ состоят из одного или нескольких исходных файлов, каждый из которых содержит некоторый текст программы. Исходный файл вместе с включаемыми файлами (файлами, включаемыми с использованием директивы препроцессора #include), но не включающими в себя фрагменты кода, удаленные директивами условной компиляции, такими как #if, называется "модулем перевода".

На мой взгляд, "единица перевода" - это обычно один исходный файл "после предварительной обработки". Вы можете получить более подробную информацию на этой странице MSDN. http://msdn.microsoft.com/en-us/library/bxss3ska(v=vs.80).aspx

Каждый файл cpp/c (реализация) будет преобразован в заголовочные единицы перевода (т. Е. Объектный файл (.obj)) в файле cpp будет заменен фактическим текстом из файлов заголовков.

Как уже говорили другие, единица перевода - это в основном содержимое исходного файла после предварительной обработки. Это самая лучшая постановка в языковой грамматике; вам нужно было бы беспокоиться только об этом, если бы вы писали компилятор C или C++.

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