Скачиваний:
39
Добавлен:
29.03.2016
Размер:
789.79 Кб
Скачать

выражения, но не внутри идентификатора.

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

Если многострочный комментарий начинается с символа ‘$’, то компилятор рассматривает введенную строку как директиву компилятора

Все директивы условно можно разделить на две группы:

директивы условной компиляции;

директивы задающие режимы работы компилятора.

Содной из директив задающих работу компилятора вы уже знакомы – это директива APPTYPE, которая задает тип создаваемого приложения консольное (значение CONSOLE) или графическое (GUI). Все директивы задающие режимы работы компилятора делятся на локальные и глобальные. Глобальные имеют область действия всю программу, их работа не зависит от местоположения директивы, например директива APPTYPE является глобальной. Локальные директивы имеют локальную область действия, например директива {$Q}, рассмотренная выше. Её область действия распространяется до строки с такой же директивой, но с другим значением, например

{$Q+}

здесь есть контроль переполнения

{$Q-}

здесь код для контроля переполнения не генерируется

Более подробно с директивами компилятора можно познакомиться в документации на компилятор.

Директивы условной компиляции

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

DEFINE <имя>

Объявляет имя. Под именем подразумевается любой идентификатор. Например,

{$DEFINE DEBUG}

Чтобы удалить объявление имени нужно указать директиву

UNDEF

Директива

IFDEF <имя>

проверяет объявлено ли указанное имя. Если оно объявлено, то текст идущий после директивы включается в код программы, иначе он туда не включается.

ENDIF

Указывает на окончание блока IFDEF. Например,

Листинг 7

{$IFDEF FPC} {$MODE DELPHI}

{$ENDIF}

{$APPTYPE CONSOLE}

{$DEFINE DEBUG} program Dirr;

var j, n, summa :integer; begin

writeln('Vvedite n'); readln(n);

j:=n+5; {$IFDEF DEBUG}

writeln('j= ', j); {$ENDIF}

summa:=n + j; writeln('summa= ', summa); readln;

end.

Для того чтобы отменить объявление имени DEBUG необходимо просто стереть символ «$»(или поставить передним точку или пробел) и компилятор пропустит все символы в фигурных скобках, т. к. будет считать его комментарием. Код, находящийся между директивами IFDEF и ENDIF, будет пропущен и не попадет в исполняемый модуль. Для включения этого кода в программу достаточно просто восстановить символ «$» (стереть точку).

Кроме директив DEFINE, UNDEF, IFDEF и ENDIF существует еще две директивы условной компиляции это

IFNDEF <имя>

действие обратное директиве IFDEF, если имя не объявлено, то фрагмент включается в текст.

ELSE

применяется в паре с директивой IFDEF либо директивой IFNDEF, например

{$IFDEF DEBUG}

если объявлено DEBUG включаем этот фрагмент {$ELSE}

иначе включаем этот фрагмент

{$ENDIF}

Рассмотрим еще одну часто используемую директиву компилятора. Это директива INCLUDE. Она не относится к директивам условной компиляции, но часто применяется совместно с ними.

INCLUDE <имя файла>

В то место где указана эта директива вставляется все содержимое указанного файла. Допускается сокращенная запись этой директивы {$I <имя файла>}

Поместим в файл с именем deb.inc следующую строку writeln('j= ', j); Перепишем предыдущий пример в следующем виде

Листинг 8

{$IFDEF FPC} {$MODE DELPHI}

{$ENDIF}

{$APPTYPE CONSOLE}

{$DEFINE DEBUG} program Dirr;

var j, n, summa :integer; begin

Соседние файлы в папке ЛР по программированию FreePASCAL