Текст программы представляет собой блок, содержащий секцию описаний и секцию действий. Блоком можно считать и текст описания подпрограммы. Таким образом, можно текст программы на Паскале рассматривать как иерархию вложенных блоков.
Каждый объект (константа, тип данных, переменная или подпрограмма), описанный в программе на Паскале, имеет свою область «видимости» (соответствующее описание имеет свою область действия). Область действия описания начинается с места описания и заканчивается концом блока (оператором end), в котором выполнено описание. Для программы, структура которой условно изображена на схеме, подпрограмма А «видна» в любой части программы после ее описания. Подпрограмма В определена для секции действий программы. Подпрограммы А1 и А2 могут использоваться в секции действий подпрограммы А, причем подпрограмма А1 может быть использована в подпрограмме А2. Ни подпрограмма А1, ни подпрограмма А2 не могут выть использованы вне описания подпрограммы А. Подпрограмма А может быть вызвана в описании подпрограммы В (в секции действия В, или в секциях действия В1, В2, В21 и В22).
Аналогично определяется область действия описания типов данных, констант и переменных. Объект (подпрограмма, константа, тип данных или переменная) «виден» в тексте программы с места описания, до конца блока, в котором находится описание. Объект, использованный в блоке, входящем в область «видимости» его описания, называется глобальным по отношению к этому блоку. Использование глобальных объектов для обмена данными между программой и подпрограммой является альтернативой для механизма формальных и фактических параметров. Выбор способа передачи данных (для каких данных использовать механизм глобальных параметров, а для каких механизм формальных и фактических параметров) является одним из важнейших вопросов разработки проекта программы (не зависимо от того, на каком языке программирования будет реализован проект).
Внутри блока могут использоваться как глобальные, так и локальные объекты. К локальным объектам относятся формальные параметры и параметры, описанные внутри блока. Если локальный параметр совпадает по имени с одним из глобальных параметров, то глобальный параметр в данном блоке недоступен (правило экранирования). Внутреннее описание более сильное, оно перекрывает описание внешнего блока.
Program prog;
var i,x:integer; {глобальные переменные}
procedure p1(u:integer; var v:integer);
var i,y:integer; {локальные переменные}
begin
x:=1;
i:=2; y:=3;
writeln(x,i,y,u,v);
u:=7; v:=8;
end;
Begin
x:=0; i:=0;
writeln(x,i);
p1(i,i);
writeln(x,i);
end.
Результат работы программы: