Дмитрий Поляков - Программирование в среде Турбо Паскаль стр 13.

Шрифт
Фон

| { $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} всегда замыкает блок, начатый ключом {$IF...}. Пример на рис. 3.3 можно без ущерба для смысла переписать в ином виде (рис. 3.4).

| { SDEFINE variant0}

| BEGIN

| {$IFDEF variant0 }

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

| {$ELSE}

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

| {$ENDIF}

| END.

Рис. 3.4

Здесь задействован ключ {$ELSE}, направляющий ход компиляции в альтернативное русло, если не выполняется условие предшествующего ключа {$IF...}. Для такого сложного условия ключ конца все равно будет один.

Блоки, компилируемые условно, могут содержать любое число операторов. Части программы, находящиеся вне блоков условной компиляции {$IF...}...{$ENDIF}, никак не зависят от ключевых слов. Само ключевое слово может содержать сколько угодно символов (только латинских и цифр), хотя распознаются только первые 63 из них. Ключевые слова имеют смысл только в ключах-командах условной компиляции и никак не перекликаются с идентификаторами самой программы.

Однажды объявленное ключевое слово можно отменить по ходу процесса компиляции (перевести из активного состояния в пассивное) ключом

- 59 -

{$UNDEF КлючевоеСлово}

После такой строки в тексте слово считается не заданным.

До сих пор речь шла о вводимых программистом ключевых словах. Кроме них, всегда определены три слова:

VER55 - ключевое слово версии компилятора (языка); для версий 5.0 и 4.0 оно было другим - VER50 и VER40 соответственно;

MSDOS - ключевое слово типа ОС; в MS-DOS, PC-DOS или их аналогах это слово именно такое;

CPU86 - ключевое слово семейства центрального процессора; если он не из семейства 80X86, то это слово будет другим.

К этому списку слов может быть добавлено еще одно, если компилятор обнаружил наличие математического сопроцессора 80X87:

CPU87 - ключевое слово, определенное, если в ПЭВМ имеется математический сопроцессор.

Ключевое слово сопроцессора позволяет установить порядок компиляции в зависимости от комплектации ПЭВМ:

{$IFDEF CPU87 -

{$N+ включаем режим использования сопроцессора }

TYPE

объявляем типы с повышенной точностью;

{$ELSE}

{$N- не используем возможности сопроцессора }

TYPE

объявляем типы с обычной точностью:

{$ENDIF}

В списке ключей условной компиляции был еще один ключ {$IFOPT}. Принцип его работы такой же, как и ключа {$IFDEF}. Отличие состоит лишь в условии срабатывания. Здесь им является состояние какого-либо ключа режима компиляции. Например, если программа компилируется в режиме {$N+}, заданном в тексте или умолчанием, то условие {$IFOPT N+} - истинно, a {$IFOPT N-} - ложно.

Теперь есть возможность управлять ходом компиляции, опираясь на состояние различных режимов. Ключ {$IFOPT} может иметь альтернативную ветвь {$ELSE} и по-прежнему обязан иметь закрывающую блок условной компиляции директиву {$ENDIF}.

Напомним, что все ключи условной компиляции имеют смысл только в процессе компиляции программ и не принимают участия в выполнении их.

- 60 -

Глава 4. Введение в систему типов языка

Турбо Паскаль является языком с сильной системой типизации. Это означает, что все данные, обрабатываемые программой, должны принадлежать к какому-либо заранее известному типу. В языке предопределено достаточное количество типов данных (например, целые и вещественные числа, символы, строки и т.п.) и имеются большие возможности для объявления новых типов, более подходящих для конкретных практических приложений.

Объявление новых типов в программе на Паскале происходит в блоке описания типов TYPE. Алгоритм объявления нового типа прост: ставится ключевое слово TYPE, и за ним следует перечисление новых имен типов, которые будут введены, и конструкций из уже известных или ранее введенных типов, непосредственно определяющих новый тип. Схематично это выглядит так:

TYPE

НовыйТип1 = Массив целых чисел;

НовыйТип2 = Множество символов;

...

НовыйТип101 = Целое число;

НовыйТип102 = Перечисленные здесь значения;

В реальной программе, конечно, слева должны стоять имена - названия новых типов (идентификаторы введенных типов), а справа - определяющие тип зарезервированные слова и имена образующих типов. Между именем и его определением обязателен знак равенства "=" (не путать со знаком присваивания ":="). Также обязательна точка с запятой ";" после завершения определения каждого нового типа. Концом блока описания типов считается начало любого другого блока (например, VAR, CONST, BEGIN) или описание заголовков процедур и (или) функций.

Какие же возможные типы данных и способы их развития предоставляет Турбо Паскаль? Система типов Турбо Паскаля значительно шире, чем в стандартном Паскале. В первую очередь, это обусловливается большим количеством базовых (простых) типов языка. Так, одних только целочисленных типов вводится пять (с математическим сопроцессором - все шесть)!

Основной (стандартный) набор простых, т.е. определяющих тип только одного отдельного значения, типов таков:

- 61 -

1. Числовые типы:

короткое целое без знака - Byte (0..255);

короткое целое со знаком - ShortInt (-128..127);

целое без знака - Word (0..65535);

целое со знаком - Integer (-32768..32767);

длинное целое со знаком - LongInt (-2147483648..2147483647);

вещественное - Real (точность 11-12 знаков после запятой).

2. Логический тип - Boolean.

3. Символьный тип - Char.

4. Строковый тип - String, String[n].

5. Адресный тип (указатель) - Pointer.

6. Перечислимый тип.

7. Ограниченный тип (диапазон).

Все эти типы могут участвовать в определении сложных типов. Обращаем внимание на отсутствие типа ALPHA, встречающегося во многих реализациях Паскаля. Здесь его заменяет более универсальный и гибкий тип String. Список числовых типов может быть расширен за счет использования математического сопроцессора. Подробно они будут рассмотрены в гл. 9 "Математические возможности Турбо Паскаля".

Набор сложных типов, определяющих структуры из простых типов весьма широк:

1) массив - Array ... of ...;

2) множество - Set of ...;

3) файлы (3 вида) - Text, File, File of ... ;

4) запись - RECORD;

5) объект - OBJECT;

6) ссылка - ^БазовыйТип.

Кроме того, Турбо Паскаль вводит особый тип, называемый процедурным. Он не имеет отношения к данным и используется для организации работы процедур и функций. Файлы в системе типов Турбо Паскаля могут быть трех различных типов: текстовые (Text), обобщенные или бестиповые (File), и компонентные или типизированные (File of ...). Из них только последний является действительно сложным, т.е. составным из прочих типов. Типы Text и File предопределены в языке и включены в этот список больше для наглядности. Некоторой натяжкой является включение ссылок в список сложных типов. Вводится принципиально новый тип - объекты. С их включением язык Турбо Паскаль обрел возможности, присущие до этого только объектно-ориентированным языкам (C++, Smalltalk).

- 62 -

Сложные типы достаточно сложны, чтобы их можно было кратко рассмотреть по ходу введения в систему типов. Подробно мы их обсудим в разд. 4.2 и гл. 7, 11, 12, 13.

4.1. Простые типы языка

Без обсуждения простых стандартных типов невозможно переходить к подробному рассмотрению всех прочих элементов языка. Поэтому дадим им достаточно полные характеристики вместе с правилами записи значений разных типов. Кроме того, детально рассмотрим вводимые простые типы, с тем чтобы в дальнейшем уже лишь ссылаться на них.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке