Jump to content

Блок перевода (программирование)

В C и C++ терминологии языков программирования единица трансляции (или, точнее, единица компиляции) является основным входным сигналом для компилятора C или C++ , из которого объектный файл . генерируется [1] Единица перевода примерно состоит из исходного файла после его обработки препроцессором C. Это означает, что файлы заголовков, перечисленные в #include директивы буквально включены , разделы кода внутри #ifndef могут быть включены, а макросы расширены.

Контекст

[ редактировать ]

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

Предварительная обработка, в частности, состоит из расширения исходного файла для рекурсивной замены всех #include директивы, в которых объявлен литеральный файл (обычно файлы заголовков , но, возможно, и другие исходные файлы); Результатом этого шага является блок предварительной обработки перевода . Дальнейшие шаги макрорасширение включают #define директивы и условную компиляцию #ifdef директивы, среди прочего; это преобразует единицу перевода предварительной обработки в единицу перевода . Из единицы трансляции компилятор генерирует объектный файл , который можно в дальнейшем обработать и связать (возможно, с другими объектными файлами) для формирования исполняемой программы .

Обратите внимание, что препроцессор в принципе не зависит от языка и является лексическим препроцессором , работающим на уровне лексического анализа – он не выполняет синтаксический анализ и, следовательно, не может выполнять какую-либо обработку, специфичную для синтаксиса C. Входными данными для компилятора является единица трансляции, и поэтому он не видит никаких директив препроцессора, которые все были обработаны до начала компиляции. Хотя данная единица перевода в основном основана на файле, фактический исходный код, подаваемый в компилятор, может существенно отличаться от исходного файла, который просматривает программист, особенно из-за рекурсивного включения заголовков.

Единицы перевода определяют область действия , грубо говоря, область действия файла , и функционируют аналогично области действия модуля ; в терминологии C это называется внутренней связью , которая является одной из двух форм связи в C. Имена (функции и переменные), объявленные вне функционального блока, могут быть видимы либо только внутри данной единицы перевода, и в этом случае они Говорят, что они имеют внутреннюю связь – они не видны компоновщику – или могут быть видны другим объектным файлам, и в этом случае говорят, что они имеют внешнюю связь и видимы компоновщику.

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

Организация кода

[ редактировать ]

Основная часть кода проекта обычно хранится в файлах с расширением .c суффикс (или .cpp, .cxx или .cc для C++ , из них .cpp используется наиболее традиционно). Файлы, предназначенные для включения, обычно имеют .h суффикс ( .hpp или .hh также используются для C++, но .h является наиболее распространенным даже для C++) и обычно не содержит определений функций или переменных, чтобы избежать конфликтов имен, когда заголовки включены в несколько исходных файлов, как это часто бывает. Файлы заголовков могут быть включены и часто включаются в другие файлы заголовков. Это стандартная практика для всех .c файлы в проекте, чтобы включить хотя бы один .h файл.

См. также

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f47d93844a4932086ef12678f37cd069__1705517580
URL1:https://arc.ask3.ru/arc/aa/f4/69/f47d93844a4932086ef12678f37cd069.html
Заголовок, (Title) документа по адресу, URL1:
Translation unit (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)