Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 36

{$L code} {$L c:\pascal\obj\grafproc.obj}

Обычно после директивы {$L...} в тексте программы сразу ставятся описания внешних процедур и функций, реализованных в подключенном коде.

К той же серии компонующих структуру программы ключей можно отнести команду объявления оверлейных (перекрывающихся) наборов процедур и функций:

- 57 -

{$O ИмяОверлейногоМодуляНаДиске}

Подробную информацию об оверлейных структурах смотрите в гл. 18 «Модуль Overlay».

3.4. Условная компиляция программ


Принципы условной компиляции тесно связаны с построением программ на Турбо Паскале. Разрешая группировать блоки VAR, TYPE и прочие по функциональным признакам и размещать их в различных местах программы, Турбо Паскаль предоставляет еще и средства управления порядком компиляции (не путать с режимами!). Любой, кто отлаживал свои программы, знает, как исключить из работы фрагмент текста: надо оформить его как комментарий или обойти оператором перехода типа GOTO. Но все это нарушает исходный текст. Турбо Паскаль вводит особый набор ключей компиляции для решения подобных вопросов. Их немного:

{$DEFINE КлючевоеСлово } задание ключевого слова,

{$UNDEF КлючевоеСлово } сброс ключевого слова,

{$IFDEF КлючевоеСлово } проверка задания слова,

{$IFNDEF КлючевоеСлово } проверка отсутствия задания ключевого слова,

{$IFOPT КлючИзнак } проверка режима компиляции,

{$ELSE) альтернативная ветвь,

{$ENDIF) обязательный конец условия.

Ключ $DEFINE определяет (задает) условное ключевое слово, которое становится активным и известным компилятору и по которому будут срабатывать другие ключи: $IFDEF — проверка условия активности этого слова и $IFNDEF — проверка отсутствия его задания (рис. 3.3).


| >{ $DEFINE variant0 }

| BEGIN

| >{$IFDEF variant0 }

| >WriteLn ( 'Вариант программы номер 0' );

| >{$ENDIF)

| >{$IFNDEF variant0 }

| >WriteLn ( 'Ненулевая версия программы' );

| >{$ENDIF}

| END.


Рис. 3.3


- 58 -

Если в тексте программы определено ключевое слово (здесь variant0), то будет откомпилирован блок, зависящий от активности этого слова, т.е. заключенный между ключами {$IFDEF variant0} и {$ENDIF}. Альтернативный вариант блока будет компилироваться только, когда ключевое слово variant0 неопределено (пассивно). На это указывают обрамляющие его ключи {$IFNDEF variant0}...{$ENDIF}. Но если, например, изменить в тексте ключа $DEFINE слово variant0 на variant1 и заново откомпилировать программу, то все получится наоборот: будет пропущен первый блок (его слово не определено), но откомпилирован второй (условие отсутствия слова выполняется).


Можно заметить, что обязательная директива {$ENDIF} всегда замыкает блок, начатый ключом {$