2. Типы Type1 и Type2 описаны как эквивалентные. Это означает, что, например, при описании
| TYPE
| Type1 = Array [1..2] of Boolean;
| Type2 = Type1;
| Type3 = Type2;
значения типов Type1, Type2 и Type3 будут полностью совместимы. Аналогичная картина возникает и при объявлении переменных. Если переменные причислены к одному и тому же типу
VAR
x1, x2, xЗ : Type1;
то они совместимы. Если Type1 — идентификатор типа, а не конструкция, то совместимость сохранится и при объявлении вида
| VAR
| x1 : Type1;
| x2 : Type1;
| x3 : Type2;
Здесь Type2 идентичен типу Type1, но будут несовместимы переменные x1 и x2:
| VAR
| x1 : Array [1..2] of Real;
| x2 : Array [1..2] of Real;
Ограничения на совместимость только по идентичным типам было бы слишком жестким. Поэтому совместимость в Турбо Паскале трактуется несколько шире. Так, типы считаются совместимыми, если:
— оба типа являются одинаковыми;
— оба типа являются вещественными типами;
— оба типа являются целочисленными;
- 87 -
— один тип является поддиапазоном другого;
— оба типа являются поддиапазонами одного и того же базового типа;
— оба типа являются множественными типами с совместимыми базовыми типами;
— один тип является строковым, а другой тип — строковым или символьным типом;
— один тип является указателем (Pointer), а другой — указателем или ссылкой.
Совместимость, в описанном выше смысле, гарантирует работоспособность операций присваивания. Кроме того, что очень важно, она определяет правила подстановки значений или переменных в вызовы процедур и функций.
Существует еще один вид совместимости: совместимость по присваиванию, т.е. правила присваивания значения V2 (собственно значение, переменная или выражение) переменной V1. Они действительны только для операций присваивания и являются немногим более широкими, чем правила совместимости по типам. Значение V2 типа Type1 может быть присвоено переменной V1 типа Type2, если выполняется одно из условий:
1. Type1 и Type2 — тождественные типы, и ни один из них не является файловым типом или структурным типом, содержащим компонент с файловым типом.
2. Type1 и Type2 — совместимые перечислимые типы, и значения типа Type2 попадают в диапазон возможных значений Type1.
3. Type1 и Type2 — вещественные типы, и значения типа Type2 попадают в диапазон возможных значений Typel.
4. Typel — вещественный тип, а Type2 — целочисленный тип.
5. Type1 и Type2 — строковые типы.
6. Type1 — строковый тип, а Type2 — символьный тип.
7. Type1 и Type2 — совместимые множественные типы, и все члены значения множества типа Type2 попадают в диапазон возможных значений Type1.