≪
≫

Совместимость типов

Некоторые операции выполнимы только в том случае, если типы их операндов совместимы. Типы ti и t% называются совместимыми, если:

  • • это один и тот же тип;
  • • ti — диапазонный тип, производный от типа t?, или — диапазонный тип, производный от ti, или ?i и ?2 — диапазонные типы, производные от одного базового типа;
  • • ?1 и ?г — типы множеств над двумя совместимыми типами, причем оба одновременно обладают либо атрибутом packed, либо unpacked;
  • • ?1 и ?2 — типы (статических) строк символов с одинаковой длиной.

Кроме того, существует совместимость по присваиванию. Совместимость по присваиванию типа переменной в левой части и типа ?2 выражения в правой части (?1 := ?2) определяется так:

  • • ?1 и ?2 — это один и тот же тип, кроме типа файла;
  • • ?1 — тип real, ?2 — тип integer;
  • • ?1 и ?2 — совместимые скалярные типы (кроме real), и значение типа ?2 принадлежит к tp,
  • • ?1 и ?2 — совместимые типы множеств, и элементы значения типа ?2 принадлежат к типу, базовому по отношению к tp,
  • • ?1 и ?2 — совместимые (статические) строковые типы.

Понятие совместимости применяется также к передаче параметров при вызове процедур и функций. При передаче параметров по ссылке типы формальных и фактических параметров должны быть совместимы; при передаче по значению — совместимы по присваиванию.

Пример 2.3.26.

При объявлении

type vecl = array [1..10] of real;

vec2 = array [1..10] of real;

vec3 = vecl;

типы vecl и vec3 совместимы, так как это один и тот же тип, a vecl и vec2 несовместимы, хотя и имеют одинаковую структуру.

------------------------------------------ PASCAL-XSC ----

Так как в языке PASCAL-XSC предусмотрены дополнительные типы динамических массивов и строк, понятие совместимости также должно быть расширено. Эти расширения описаны в следующем разделе.

Кроме того, программист имеет возможность так определить операцию присваивания := (см. разд. 2.7.12), чтобы явно распространить совместимость по присваиванию на типы, которые иначе были бы несовместимы. Такое расширение совместимости действует только в операторе присваивания, но не при передаче параметров по значению в вызовах процедур и функций.

 
Посмотреть оригинал