7.1. Режимы компилятора Free Pascal

На верх  Назад  Вперёд

Команда Free Pascal старается создать компилятор, который мог бы компилировать код, максимально совместимый с кодом для Turbo Pascal, Delphi или компиляторов Pascal Mac: это должно сделать перенос кода, написанного для этих компиляторов, максимально лёгким.

В то же время разработчики Free Pascal внедрили несколько расширений в язык Object Pascal. Для согласования этих отличий, а также для того, чтобы люди, работающие с Turbo Pascal и Delphi были уверены, что смогут легко перенести свой код, компилятор Free Pascal имеет концепцию «режимов компиляции». Выбор того или иного режима компиляции выполняется путём установки/сброса соответствующих функциональных переключателей. Это позволяет определить совместимый режим, в котором будут поддерживаться только те функции, которые присущи оригинальному компилятору. На данный момент поддерживаются 5 режимов:

Режим

Описание

FPC

Это оригинальный режим компилятора Free Pascal. Здесь поддерживаются все языковые конструкции, исключая классы, интерфейсы и исключения. Объекты поддерживаются в этом режиме. Этот режим установлен по умолчанию.

OBJFPC

Этот режим аналогичен режиму FPC, но здесь поддерживаются ещё и классы, интерфейсы и исключения.

TP

Режим совместимости с Turbo Pascal. В этом режиме компилятор пытается имитировать поведение компилятора Turbo Pascal насколько это возможно. Очевидно, может компилироваться только 32-х или 64-битный код.

DELPHI

Режим совместимости с Delphi. В этом режиме компилятор пытается имитировать поведение компилятора Delphi насколько это возможно. Все функции Delphi 7 работают. Функции Delphi 7 для .NET технологии не работают.

MACPAS

Режим совместимости с MacPascal. В этом режиме компилятор пытается выполнять все функции, которые поддерживаются в Mac Pascal. В редких случаях выполняется попытка компилировать универсальный интерфейс.

Режим компиляции можно установить для каждого модуля, то есть каждый модуль может иметь свой собственный режим компиляции. Это означает, что в одной программе можно комбинировать модули с разными режимами компиляции. Режим можно установить одним из следующих способов:

1.В командной строке с помощью параметра –М.

2.В исходном файле, с помощью директивы {$MODE }

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

Пример компиляции модуля с параметром –М приведён ниже:

fpc -MOBJFPC myunit

тот же результат получим с помощью директивы MODE:

{$MODE OBJFPC}
Unit myunit;

Директива MODE должна быть всегда помещена перед оператором uses в модуле или программе, так как установки режима могут влиять результат загрузки дополнительных модулей после того, как первый модуль будет загружен.

Учтите, то директива {$MODE } – это глобальная директива, то есть она распространяется на весь модуль. Только одна директива может быть определена в модуле.

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