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


1. Статическое соответствие
Компилятор приемлет любые сочетания числовых типов левой и правой части, кроме сочетания «слева целый тип, справа — вещественный». Если правая часть — константное выражение, дополнительно проверяется, не выходит ли его значение из диапазона значений типа левой части. Если бы в нашем примере был записан оператор m:= Round(x*j)/5 + (j + 2E3)*k, то компиляция выявила бы несоответствие типов левой (integer) и правой части.

2. Динамическое соответствие
Оно заключается в требовании, чтобы значение АВ правой части не выходило из интервала значений, определяемого типом левой части. Совместимость по присваиванию требует как статического, так и динамического соответствия левой и правой части. Аналогичны требования к выражению (своеобразной правой части), используемому как аргумент функции или процедуры.

Становится понятно, почему математические функции рассмотренные ранее допускают параметр целого типа, например Ln (2): формальный аргумент (левая часть) — вещественный, сочетание с параметром целого типа (правая часть) допустимо.

Проверки динамического соответствия возможны лишь при выполнении программы.

О статическом несоответствии сообщает компилятор. Иначе говоря, есть возможности быстрого устранения ошибок. Последнее нередко выполняется через приведение типа. Функции Round и Trunc — это пример функций приведения к нужному типу. Функция DoubleTo-Comp(x) приводит значение x типа double к типу Comp. Для приведения к нужному целому типу используются функции следующего вида:
• Аргумент свой тип сохраняет, просто создается копия в требуемом типе
• При разном целом типе левой и правой части оператора присваивания приведения типа – автоматическое.


Комментарии запрещены.




Статистика