Поделиться через


Фазы трансляции

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

Исходные файлы можно преобразовать в любое время — фактически, обычно преобразовываются только устаревшие файлы. Преобразованные записи преобразования можно обработать в отдельные файлы объектов или библиотеки объектного кода. Затем эти отдельные преобразованные записи преобразования объединяются для создания исполняемой программы или библиотеки динамической компоновки (DLL). Дополнительные сведения о файлах, которые можно использовать в качестве входных данных компоновщика, см. в разделе Входные LINK-файлы.

Записи преобразования могут взаимодействовать следующим образом.

  • Вызовы функций с внешней компоновкой.

  • Вызовы функций-членов класса с внешней компоновкой.

  • Прямое изменение объектов с внешней компоновкой.

  • Прямое изменение файлов.

  • Межпроцессное взаимодействие (только для приложений на базе Microsoft Windows).

В следующем списке описываются этапы преобразования файлов компилятором.

  • Сопоставление символов
    Символы в исходном файле сопоставляются с внутренним представлением источника. На этом этапе последовательности триграфа преобразуются в односимвольное внутреннее представление.

  • Соединение строк
    Все строки, заканчивающиеся обратной косой чертой (\), за которыми сразу следует символ новой строки, объединяются со следующей строкой в исходном файле, формируя логические строки из физических строк. Если исходный файл не является пустым, он должен заканчиваться символом новой строки, которому не предшествует символ обратной косой черты.

  • Разметка
    Исходный файл разделен на токены предварительной обработки и символы пробела. Каждый комментарий в исходном файле заменяется одним пробелом. Символы новой строки сохраняются.

  • Предварительная обработка
    Выполняются директивы предварительной обработки, и макросы разворачиваются в исходный файл. Оператор #include вызывает преобразование любого включенного текста, начинающееся с указанных выше трех шагов преобразования.

  • Сопоставление кодировки
    Все члены и escape-последовательности в исходной кодировке преобразуются в эквивалентные значения в кодировке выполнения. В Microsoft C и C++ исходная кодировка и кодировка выполнения являются кодировками ASCII.

  • Объединение строк
    Все смежные строковые и расширенные строковые литералы объединяются. Например, запись "String " "concatenation" преобразуется в "String concatenation".

  • Преобразование
    Все токены анализируются синтаксически и семантически; эти токены преобразовываются в объектный код.

  • Компоновка
    Все внешние ссылки можно использовать для создания исполняемой программы или библиотеки динамической компоновки.

Компилятор выдает предупреждающие сообщения или сообщения об ошибках во время преобразования, если обнаруживает синтаксические ошибки.

Компоновщик разрешает все внешние ссылки и создает исполняемую программу или DLL, объединяя одну или несколько отдельных обработанных записей преобразования со стандартными библиотеками.

См. также

Ссылки

Препроцессор