Иллюстрированный самоучитель по Turbo Pascal

Директивы компилятора

Установить условие – это значит с помощью опции OPTIONS/COMPILER/CONDITIONAL DEFINES среды Турбо Паскаля или с помощью директивы компилятора {$DEFINE} ввести некоторое слово (условный символ), которое затем будет управлять компиляцией какого-либо фрагмента программы. Если, например, использовать в качестве условного символа слово DEBUG, то можно написать такой фрагмент программы:

{$IFDEF Debug}
WriteLn ('Отладка: х=,х);
{$ENDIF}

Теперь, если установлен (задан в среде или введен с помощью директивы {SDEFINE}) условный символ DEBUG, в программе будет откомпилирован оператор WRITELN, если этот условный символ не задан, компилятор пропустит этот оператор.

Отметим, что условные символы никак не связаны с множеством идентификаторов самой программы и недоступны ей на этапе исполнения. Для предыдущего примера нельзя написать:

WriteLn (Debug);

Если, разумеется, в программе не определена переменная или константа с этим именем.

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

{$IFDEF Var1}
{$IFDEF Var2}
a: = n; {$ELSE}
a: = 0;
{$ENDIF}
{$ENDIF}

В директивах {$IFDEF} или {$IFNDEF} программист может использовать следующие стандартные условные символы, которые устанавливаются в среде автоматически:

  • VER70 – указывает версию 7.0 Турбо Паскаля (для других версий используются другие условные символы: VER40, VER50, VER55, VER60);
  • MSDOS – указывает на то, что программа будет исполняться под управлением операционной системы MS-DOS (PC DOS); версии Турбо Паскаля для других операционных систем не будут устанавливать этот символ;
  • CPU86 – указывает на то, что программа будет исполняться на ПК с микропроцессором, принадлежащим семейству Intel 80x86;
  • CPU87 – указывает на то, что в составе аппаратных средств ПК обнаружен (к моменту компиляции программы!) арифметический сопроцессор семейства Intel 80x87.

К параметрическим относятся директивы:

  • {$М <стек>,<нижн>,<верх>} – установить требуемые размеры памяти (глобальная директива); здесь <стек> – размер стека; <нижн> – нижняя граница динамической памяти; <верх> – верхняя граница динамической памяти;
  • {$I <имя файла>} – включение PAS-файла: <имя файла> – имя включаемого файла;
  • {$L <имя фапла>} – включение OBJ-файла: <имя файла> – имя включаемого файла.

В директиве {$М} все размеры задаются в байтах, следуют друг за другом в указанной последовательности и отделяются запятыми. Между буквой М и первой цифрой размера стека должен быть хотя бы один пробел, между последней цифрой верхней границы динамической памяти и закрывающей фигурной скобкой не должно быть никаких символов, например:

{$М 16384.0.655360}

Включаемый файл, определенный в директиве {$I}, должен содержать исходный текст фрагмента программы. Компилятор использует эту директиву как указание обратиться к дисковому файлу за очередной строкой программы. После того, как весь фрагмент программы из файла будет прочитан, компилятор продолжит чтение строк из файла редактора. Если в имени файла опущено расширение, используется стандартное расширение .PAS. Диск и каталог, в котором находится файл, задаются опцией OPTIONS/ENVIRONMENT/DIRECTORIES.

Директива ($L) предназначена для указания компилятору файла, в котором содержится результат трансляции ассемблерной процедуры или функции, объявленной в программе как внешняя (EXTERNAL, см. гл. 11). Если в имени файла опущено расширение, используется стандартное расширение .OBJ. Диск и каталог, в котором находится файл, задаются опцией OPTIONS/ENVIRONMENT/DIRECTORIES.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.