Что такое "единица перевода" в С++
В то время я читаю "Эффективный С++", написанный Майерсом
и натолкнулся на термин "единица перевода".
Может кто-нибудь, пожалуйста, дайте мне объяснение:
1) Что именно это
2) Когда следует использовать его при программировании на С++
3) Если он связан только с С++ или может использоваться с другими языками программирования
Возможно, я уже использовал его, не зная термин....
Ответы
Ответ 1
Из здесь: (ссылка на обратный путь)
В соответствии с стандартным С++ (ссылка на обратный путь): Единицей перевода является базовая единица компиляции в С++. Это состоит из содержимое одного исходного файла, плюс содержимое любых файлов заголовков прямо или косвенно включаемые им, минус те строки, которые были проигнорированы с использованием условной предварительной обработки заявления.
Единая единица перевода может быть скомпилирован в объектный файл, библиотеку, или исполняемой программы.
Понятие единицы перевода чаще всего упоминается в контексте правила Единого определения и шаблоны.
Ответ 2
Блок перевода предназначен для всех целей и задач файла (.c/.cpp) после его завершения, включая все файлы заголовков.
http://msdn.microsoft.com/en-us/library/bxss3ska%28VS.80%29.aspx
Ответ 3
Трудный вопрос, чтобы ответить окончательно. Стандарт C++ гласит:
Текст программы хранится в единицах, называемых исходными файлами в этом Международном стандарте. Исходный файл вместе со всеми заголовками (17.4.1.2) и исходными файлами, включенными (16.2) через директиву предварительной обработки #include, меньше любых строк исходного кода, пропущенных любой из директив предварительной обработки условного включения (16.1), называется единицей трансляции. [Примечание: программа C++ не обязательно должна быть переведена одновременно. ]
Таким образом, для большинства целей и целей единица перевода является единственным исходным файлом C++, а также заголовком или другими файлами, которые он включает в себя через механизм препроцессора #include.
Что касается ваших других вопросов:
2) Когда следует использовать его при программировании с помощью C++
Вы не можете не учитывать это - единицы перевода являются основой программы C++.
3) Если это связано только с C++ или может использоваться с другими языками программирования
Другие языки имеют схожие понятия, но их семантика будет немного отличаться. Например, большинство других языков не используют препроцессор.
Ответ 4
В книге достаточно ясно. Когда Мейерс ссылается на "блок переводов", он означает файл исходного кода.
Ответ 5
В дополнение к ODR единица перевода важна в определении неназванных пространств имен, которое заменяет одно из старых применений "статического".
Я думаю, у меня все еще нет достаточного количества баллов, чтобы добавить комментарий под верхним ответом.
Ответ 6
Блок перевода - это код, который передается собственно компилятору. Обычно это означает, что вывод выполняется из препроцессора в файле .c.
Ответ 7
Программы C и С++ состоят из одного или нескольких исходных файлов, каждый из которых содержит часть текста программы. Исходный файл вместе с его включенными файлами (файлы, включенные с помощью директивы препроцессора #include), но не включающие разделы кода, удаленные директивами условной компиляции, такие как #if, называются "единицей перевода".
Ответ 8
Согласно MSDN: программы на C и С++ состоят из одного или нескольких исходных файлов, каждый из которых содержит некоторый текст программа. Исходный файл вместе с его включенными файлами (файлы, включенные с помощью директивы препроцессора #include), но не включающие разделы кода, удаленные директивами условной компиляции, такие как #if, называются "единицей перевода".
Ответ 9
Каждый файл cpp/c (реализация) будет преобразован в блок перевода (т.е. объектный файл (.obj)) заголовки в файле cpp будут заменены фактическим текстом из файлов заголовков.
Ответ 10
Как говорили другие, единица перевода является в основном содержимым исходного файла после предварительной обработки. Это высшая постановка в грамматике языка; вам нужно будет только беспокоиться об этом, если вы пишете компилятор C или С++.
Ответ 11
На мой взгляд, "единица перевода" обычно является единственным исходным файлом "после предварительной обработки". Более подробную информацию вы можете получить на этой странице MSDN. http://msdn.microsoft.com/en-us/library/bxss3ska(v=vs.80).aspx