Все, что касается констант в стандарте Паскаля, верно и для Турбо Паскаля. Согласно стандарту значение простой константы имеет простой тип и не может быть записано выражением:
| CONST
| Min = 0; { константа — целое число }
| Мах = 500; { константа — целое число }
| е = 2.7; { константа — вещественное число}
| SpecChar = '\'; { константа — символ }
| HelpStr = 'Нажмите клавишу F1'; { константа — строка }
| NoAddress = nil; { константа — адрес }
| OK = True; { логическая константа истинно }
| { Можно задавать простые константы типа множество: }
| Alpha = [ 'А'..'Я' ];
Обращаем внимание, что тип значения не указывается никоим образом. Он определяется автоматически при анализе значения константы.
Расширением Турбо Паскаля является возможность определять константы как выражения из чисел, некоторых функций языка и определенных ранее простых констант. Так, приведенный список констант можно продолжить следующими примерами:
- 77 -
| Interval = Мах - Min + 1;
| Key = Chr(27); { символ с кодом 27 }
| e2 = е*е;
| BigHelpString = HelpStr + 'для подсказки';
| Flag = Ptr($0000, $00F0); { задание адреса }
В выражениях могут использоваться все математические операции (+,-,/,*,div,mod), поразрядные (битовые) действия, логические операторы (not, and, or, xor) и операции отношения (=,<,> и т.п., включая операцию in для множеств). Из стандартных функций Турбо Паскаля в выражениях констант могут участвовать только такие:
Abs(X) — абсолютное значение числа X;
Round(X) — округление X до ближайшего целого числа;
Trunc(X) — отсечение дробной части значения X;
Chr(X) — символ с кодом номер X;
Ord(X) — номер значения X в его перечислимом типе;
Pred(X) — значение, предшествующее X в его типе;
Succ(X) — значение, следующее за X в его типе;
Odd(X) — логическая функция проверки нечетности X;
SizeOf (X) — размер типа с именем X;
Length (X) — длина строки X;
Ptr(S,O) — функция задания адреса;
Lo(X), Hi(X) и Swap(X) — операции с машинными словами.
Этот же набор допускается при построении выражений в окнах отладки (Watch и Evaluate).
Все выражения вычисляются при компиляции, а затем лишь подставляются всюду вместо идентификаторов констант. Нельзя ввести простую (именно простую) константу: массив или запись. Турбо Паскаль вводит особый тип констант — типизированных — и позволяет работать с константами сложных типов (кроме файлов). Но такие сложные константы в силу особенности их реализации в языке, по сути, уже являются переменными и рассматриваются вместе с ними.
5.2. Переменные
Переменные вводятся в программу для хранения и передачи данных внутри нее. Любая переменная имеет имя (идентификатор). По правилам Турбо Паскаля имя переменной должно начинаться с буквы и может содержать буквы (только латинские), цифры и знак подчеркивания. Длина имени — почти любая (до 126 символов), но
- 78 -
различаются имена по первым 63 символам. Имена объявляемых в программе переменных должны быть перечислены в блоках описания VAR:
VAR
Имя1 : ИмяТипаОднойПеременной;
Имя2 : ИмяТипаДругойПеременной;
...
Имя9 : КонструкцияТипаПеременной;
Каждому имени переменной в блоке VAR должен ставится в соответствие ее тип. Имя и тип разделяются двоеточием. После объявления и описания переменной должен стоять символ «;». Концом блока описания будет начало какого-либо другого блока программы или описание процедур и функций.
Имя типа может быть именем предопределенного в языке типа или введенного программистом в предыдущем блоке описания типов TYPE. Но разрешается составлять типы по ходу объявления переменных:
| VAR
| X : Real; { вещественная переменная }
| T : Test; { переменная введенного ранее типа Test }
| i, j, k : Integer; { три целые переменные }
| Subr : 1..10; { целая ограниченная переменная }
| Dim : Array [0..99] of Byte; { переменная типа массив }
| S1, S2, { четыре переменные типа }
| S3, S4 : Set of Char; { множество символов }
| PointRec : RECORD
| X,Y : Real { запись с двумя полями }
| END;
Однотипные переменные могут перечисляться через запятую перед объявлением их типа. Никаких правил умолчания при задании типа (как в Фортране, например) или особого обозначения (как в Бейсике) нет. Все переменные должны быть описаны соответствующим типом.
Переменные подразделяются на глобальные и локальные. Глобальные — это переменные, которые объявлены в разделах VAR вне процедур и функций. Переменные, которые вводятся внутри процедур и функций, называются локальными. Среди глобальных переменных не может быть двух с одинаковым именем. Локальные же переменные, которые известны и имеют смысл только внутри процедур или функций, могут дублировать глобальные имена. При этом внутри подпрограмм
- 79 -
все обращения к таким именам соответствуют обращениям к локальным переменным, а вне их — к глобальным. Локальные и глобальные переменные всегда хранятся в разных местах и даже при одинаковых именах не влияют на значения друг друга.