Условные идентификаторы следуют точно таким же правилам, что и идентификаторы Паскаля: они должны начинаться буквой, за которой следуют сочетания букв, цифр, подчеркиваний. Они могут иметь любую длину, но только первые 63 символа являются значащими.
Условные идентификаторы и идентификаторы Паскаля не имеют друг с другом никакой связи. На условные идентификаторы не могут осуществляться ссылки в действующей программе, а на идентификаторы программы нельзя осуществлять ссылки в условных директивах. Например, конструкция:
const
Debug = True;
begin
{$IFDEF Debug}
Writeln('Debug is on');
{$ENDIF}
end;
не приведет к компиляции оператора Writeln, также как и конструкция:
{$DEFINE Debug}
begin
if Debug then writeln ('Debug is on');
end;
приведет к ошибке в операторе IF из-за неизвестного идентификатора.
В Турбо Паскале определены следующие стандартные идентификаторы:
VER10
Всегда определен, указывая, что данная версия является версией 1.0 Турбо Паскаля для Windows. Другие версии будут определять собственные соответствующие символы версий, например, символ VER20 для версии 2.0 и т.д.
MSDOS
Всегда определен, указывая, что данная операционная система является операционной системой DOS. Версии Турбо Паскаля для других операционных систем будут определять символьное имя для конкретной операционной системы.
CPU86
Всегда определен, указывая, что процессор принадлежит к семейству процессоров 80х86. Версии Турбо Паскаля для других процессоров будут определять символьное имя для конкретного процессора.
CPU87
Определен, если арифметический сопроцессор 8087 присутствует во время компиляции. Если конструкция:
{$IFDEF CPU87} {$N+} {$ELSE} {$N-} {$ENDIF}
появляется в начале компиляции, то Турбо Паскаль автоматически выберет соответствующую модель генерирации кода вычисления с плавающей точкой для этой конкретной ЭВМ.
Остальные условные идентификаторы могут устанавливаться перед компиляцией с помощью поля ввода ConditionalDefines (Условные определения) меню Options│Compiler (Параметры│Компилятор) интегрированной среды или параметра командной строки /D компилятора TPWC.
Директива DEFINE
Синтаксис: {$DEFINE имя}
Примечание: Директива $DEFINE определяет условный идентификатор данного имени. Идентификатор будет определенным для оставшейся части исходного компилируемого кода или до тех пор, пока он не появится в директиве {$UNDEFINE имя}. Директива {$DEFINE имя} не вызывает никаких действий, если "имя" уже определено.
Директива UNDEF
Синтаксис: {$UNDEF имя}
Примечание: Директива $UNDEF отменяет ранее определенный условный идентификатор. Для оставшейся части исходного компилируемого кода или до тех пор, пока он не появится в директиве {$DEFINE} идентификатор разопределяется (становится неопределенным). Директива {$UNDEF} имя не вызывает никакий действий если "имя" уже отменено.
Директива IFDEF
Синтаксис: {$IFDEF идентификатор}
Примечание: Директива IFDEF компилирует следующий за ней исходный текст, если имя "идентификатор" определено.
Директива IFNDEF
Синтаксис: {$IFNDEF идентификатор}
Примечание: Директива IFNDEF компилирует следующий за ней исходный текст, если имя "идентификатор" не определено.
Директива IFOPT
Синтаксис: {$IFOPT переключатель}
Примечание: Директива IFOPT компилирует следующий исходный текст, если "переключатель" находится в данное время в указанном состоянии. Переключатель (директива) состоит из имени директивы-переключателя, за которым следует знак плюс (+) или знак минус (-). Например, конструкция:
{$IFOPT N+}
type real = extended;
{$ENDIF}
скомпилирует описание типа, если директива $N является в данное время действующей.
Директива ELSE
Синтаксис: {$ELSE}
Примечание: Директива ELSE приводит к компиляции или игнорированию исходного текста, ограниченного последним {$IFxxx} и следующим {$ENDIF}.
Директива ENDIF
Синтаксис: {$ENDIF}
Примечание: Директива ENDIF заканчивает условную компиляцию, начатую последней директивой {$IFxxx}.
