...}. Пример на рис. 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} может иметь альтернативную ветвь {$