Вторник, Октябрь 20Добро пожаловать!

Локальные и глобальные идентификаторы в языке Pascal

Когда мы используем процедуры и функции в Паскале, то имеем дело с идентификаторами (т.е. именами) в программе. При составлении программного кода для использования не все имена оказываются доступными. Доступ к определенному идентификатору в тот или иной момент времени осуществляется в зависимости от того, в каком блоке описан используемый идентификатор.

Помните: формальные параметры функций и процедур всегда представляют собой локальные переменные для тех блоков, где они описаны.

Как представляются локальные и глобальные идентификаторы в языке Паскаль?

Существует два типа идентификаторов: локальные и глобальные идентификаторы Паскаль.

Локальные идентификаторы в языке Pascal

Локальные идентификаторы — это имена, которые описаны либо в заголовке, либо в разделе описаний функции или процедуры.

Основное правило работы с такими идентификаторами:

Локальные идентификаторы являются доступными только лишь в пределах того блока, в котором они описаны. Этот блок, а также все остальные блоки, вложенные в него, называются областью видимости для соответствующих локальных идентификаторов.

Глобальные идентификаторы в языке Pascal

Глобальные идентификаторы — это имена, заключенные в блоке Program, используемом для всей программы.

При работе с этим типом идентификаторов следует руководствоваться правилом.
Идентификаторы, которые описаны в одном блоке, могут совпасть с идентификаторами из других блоков, которые либо содержат данный блок, либо вложены в него. Причиной этому является тот факт, что переменные, которые описаны в различных блоках (пусть у них всех одинаковые имена), хранятся в различных областях ОЗУ (оперативная память).

Область памяти, хранящая глобальные идентификаторы, называется сегментом данных программы. Их создание происходит в процессе компиляции, и кроме того они действительны на протяжении всей работы программы.

Локальные переменные, в отличие от глобальных, хранятся в области памяти, которая именуется стеком. Они временны, поскольку их создание осуществляется в момент входа в подпрограмму, а уничтожение — в момент выхода из подпрограммы.

Может возникнуть ситуация, когда имя, которое описано в блоке, в случае совпадения «закрывает» те же самые имена из блоков, содержащих данный. Другими словами, если есть два блока, один из которых вложен в другой, и в обоих блоках содержатся переменные с одинаковыми именами, то после перехода во «внутренний» блок мы будем работать с переменной, локальной для рассматриваемого блока. А переменная с этим же именем, заключенная во «внешнем» блоке, оказывается временно недоступна — это будет продолжаться до тех пор, пока не осуществим выход из «внутреннего» блока.

Заметка. Все имена, имеющие в той или иной подпрограмме только лишь вспомогательное назначение, идентифицировать в качестве локальных, что избавляет от опасности изменений глобальных объектов с теми же именами.

Пример. Создадим программу, которая вычисляет значение функции y=a*ln(sin(x)).

program log;
var d : real;      {глобальные параметры}
function fun (b,x:real):real;     {начало описания функции}
var y:real;        {локальные параметры}
begin
y:=b*ln(sin(x));  {вычисление значения заданного выражения}
fun:=y;    {присвоение имени функции результата вычисления подпрограммы}
end;      {конец описания функции}
begin    {начало основной программы}
writeln(‘Введите значение b’);
readln(b);
writeln(‘Введите значение x’);
readln(x);
d:=f(b,x);
writein(‘Значение функции y равно’,d);
end.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *