
- •Введение
- •Описание типов
- •Простые типы данных
- •Порядковые типы
- •Целые типы
- •Логические типы
- •Символьный тип
- •Перечисляемый тип
- •Тип-диапазон
- •Вещественные типы
- •Тип дата-время
- •Строковые типы
- •Преобразование типов
- •Приведение типов
- •Операторы
- •Арифметические операторы
- •Логические операторы
- •Оператор присваивания
- •Оператор SizeOf
- •Операторы ввода-вывода
- •Оператор write
- •Оператор read
- •Комментарии в программах
- •Директивы компилятора
- •Директивы условной компиляции
- •Задания к лабораторной работе
- •Вопросы к лабораторной работе

выражения, но не внутри идентификатора.
Директивы компилятора
Если многострочный комментарий начинается с символа ‘$’, то компилятор рассматривает введенную строку как директиву компилятора
Все директивы условно можно разделить на две группы:
•директивы условной компиляции;
•директивы задающие режимы работы компилятора.
Содной из директив задающих работу компилятора вы уже знакомы – это директива 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