18
2.8. Правила доступности и область действия имен и меток
*
если некоторая переменная используется как управляющая переменная
цикла 'FOR', то она должна быть локальной для блока, в теле которого
находится сам цикл;
*
если есть вложенные блоки, то каждый идентификатор внешнего блока
можно переописать во внутреннем. Во внутреннем блоке имеет силу
описание, сделанное в нем и программист не имеет никакой возможности
использовать идентификатор в смысле описания, данном во внешнем блоке;
*
любой идентификатор или метку можно дефинировать только один раз в
рамках данного блока. Исключениями являются случаи переописания в
блоке, вложенном в данном блоке (это описано выше) и случаи
дефинирования идентификатора как поле структуры записи. Нельзя
переописать идентификатор на том же уровне в той-же самой структуре
записи;
*
описание каждого идентификатора входит в силу с места появления его
описания до конца блока, в котором это описание находится. Использование
идентификатора до его описания неправильно и считается ошибкой.
Исключение от этого правила допускается только при описании указателей.
Разрешено описание указателя на еще неописанный тип, но его описание
(неописанного типа) должно появиться до конца того же самого раздела
описания типов, в котором находится описание указателя.
Каждая программа на языке Pascal считается описанной как локальный блок
некоторой обхватывающей его среды. В этой внешней среде (внешний блок) описаны
все стандартные идентификаторы. В языке UniPascal ситуация отличается от выше
описанной. Программа автоматически использует модуль STANDARD, так що все
стандартные идентификаторы считаются описанными в нем. июбой из них может быть
переопределен, но это считается признаком дурного стиля. Можно переописать и
стандартные типы. Например:
type WorkType = integer;
{ integer - стандартный тип integer}
 integer =  real;
{ real - стандартный тип real}
 real =     WorkType;
{ real описывается как integer}
На UniPascal-е это можно сделать еще проще:
type integer = Standard.real;
 real = Standard.integer;
После этих дефиниций, если описать переменную r так:
var r: real;
то ей можно присваивать только целые значения. Как сами могли убедиться, Pascal достаточно
гибкий язык, но всеми его возможностями надо пользоваться в меру.
<<  <  GO  >  >>

Вернуться к началу сайта