Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 55

Типизированные константы (переменные со стартовым значением) могут быть и глобальными, и локальными, как любые другие переменные. Но даже если объявляется переменная со значением внутри процедуры, т.е. заведомо локальная, то ее значение будет размещено не в стеке, а в сегменте данных. (Об этом подробнее см. разд. 6.9.6.2 «Статические локальные переменные».)

Особенностью компилятора Турбо Паскаль (точнее, его редактора связей — компоновщика) является то, что в выполнимый код программы не входят те переменные, которые объявлены, но не используются. То же самое имеет место и для типизированных констант. Но минимальным «отсекаемым» компоновщиком куском текста программы может быть лишь блок описания CONST или VAR. Поэтому, если заведомо известно, что не все объявляемые переменные будут использоваться одновременно, лучше разбивать их на различные блоки объявлений:

- 85 -

| VAR

| x1, х2, хЗ : Real;

| VAR

| y1, y2, y3 : Integer;

| CONST

| Dim1 : Array [4..8] of Char = '4567';

| CONST

| Dim10tladka : Array [1..10] of Char = '0123456789';

и т.д.

Смысл программы это не изменит, а компоновщик сможет доказать свою эффективность.

5.3. Операция присваивания и совместимость типов и значений


Если в программе объявлены переменные, то подразумевается, что они будут получать свои значения по ходу ее выполнения. Единственный способ поместить значение в переменную — это использовать операцию присваивания в программе:

Переменная := Значение;

Оператор присваивания — это составной символ «:=». Его можно читать как «становится равным». В операции присваивания слева всегда стоит имя переменной, а справа — то, что представляет собой ее значение (значение как таковое или выражение либо вызов функции, но может быть и другая переменная). После выполнения присваивания переменная слева получает новое значение.

Турбо Паскаль, являясь языком с сильной системой типов, требует соблюдения определенных правил совместимости типов переменных и значений справа и слева от оператора «:=».

Очевидно, что не может быть проблем с присваиванием, если типы переменной и значений идентичны (тождественны). Два типа Type1 и Туре2 считаются идентичными, если:

1. Типы Type1 и Туре2 описаны одним и тем же идентификатором типа, например:

| TYPE

| Тype1 = Boolean;

| Type2 = Boolean;

здесь Type1 и Type2 идентичны. Но в случае

- 86 -

| TYPE

| Type1 = Array [1..2] of Boolean;

| Type2 = Array [1..2] of Boolean;

типы Type1 и Type2 не будут идентичными, поскольку конструкции Array...of..., хотя и одинаковы, но не являются идентификаторами, т.е. обособленными именами. Переменные типов Type1 и Type2 не смогут в последнем случае обмениваться значениями.