{$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} всегда замыкает блок, начатый ключом {$