2.4.1. Определение

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

Кроме обычных конструкций Turbo Pascal для условной компиляции, компилятор Free Pascal также поддерживает расширенный механизм условной компиляции: конструкцию {$IF}, которая может быть использована для вычисления выражений времени компиляции.

Прототип этой конструкции следующий:

{$if expr}
  CompileTheseLines;
{$else}
  BetterCompileTheseLines;
{$endif}

Содержание выражения ограничено тем, что может быть вычислено на этапе компиляции:

Константы (строки, числа)

Макросы

Переменные времени компиляции (только для режима MacPas )

Выражения Pascal с константами (только для режима Delphi )

Идентификаторы замещаются их значениями. Для макросов может произойти рекурсивная замена. Следующие логические операторы доступны:

=, <>, >, <, >=, <=, AND, NOT, OR, IN

Оператор IN проверяет наличие переменной времени компиляции в множестве.

Доступны следующие функции:

Функция

Описание

TRUE

Определена только в режиме MacPas, где она равна True. В других режимах может использоваться 1.

FALSE

Определена только в режиме MacPas, где она равна False. В других режимах может использоваться 0.

DEFINED(sym)

Возвращает TRUE, если идентификатор времени компиляции определён. В режиме MacPas скобки не обязательны, то есть

{$IF DEFINED(MySym)}

Эквивалентно

{$IF DEFINED MySym}

UNDEFINED sym

Возвращает TRUE, если идентификатор времени компиляции НЕ определён, и FALSE, если определён (только в режиме MacPas ).

OPTION(opt)

Возвращает TRUE, если опция компилятора установлена (только в режиме MacPas ). Это эквивалентно директиве {$IFOPT }.

SIZEOF(passym)

Возвращает размер типа Pascal, переменную или константу.

DECLARED(passym)

Возвращает TRUE, если идентификатор Pascal объявлен на текущий момент в исходном коде, иначе возвращает FALSE.

В выражениях при вычислениях используются следующие правила:

Если все части выражения могут быть вычислены как логические (числа 1 и 0 представляют соответственно TRUE и FALSE), то выражение вычисляется с использованием логических операторов.

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

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

Если полное выражение имеет значение «0», то оно считает ложным и отклоняется. Иначе оно считается истинным и принимается. Это может иметь неожиданные последствия:

{$if 0}

Будет вычислено как False и отклонено, в то время как

{$if 00}

Будет вычислено как True.