Можно заметить, что обязательная директива {$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 -

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

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

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

TYPE

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

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

...

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

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

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

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

Перейти на страницу:

Поиск

Похожие книги