Любая подпрограмма перед использованием должна быть описана. Из В можно вызвать А, но не наоборот (использовать опережающее описание). Подпрограмме доступны только те объекты верхнего уровня, которые описаны до объявления переменных данной программы. Эти объекты являются глобальными по отношению к программе.
В Турбо Паскале допускается произвольная последовательность описания констант, переменных, типов, меток и подпрограмм. Раздел описания переменных varможет появляться много раз. Безразличен порядок следования и количество разделов var, const, type, label.
НО При определении области действия этих описаний следует помнить, что имена, описанные ниже по тексту программ, недоступны из ранее описанных подпрограмм.
Пример
var v1: ...;
procedure S;
var v2: ...;
…………..
end {S};
var v3: ...;
…………..
Из процедуры S можно обратиться к переменным v1 и v2, но нельзя использовать v3, т.к. v3 следует в программе за описанием процедуры S.
Имена, локализованные в подпрограмме, могут совпадать с ранее объявленными глобальными переменными. Считается, что локальное имя «закрывает» глобальное, делая его недоступным.
Пример
var
i: integer;
procedure P;
var
i: integer;
begin
writeln(i);
end {P};
begin
i:=1;
P;
end.
Программа печатает всё, что угодно, так как i – не определено. Если описание var i: integer убрать, то будет напечатано значение глобальной переменной 1.