Вопросы для проверки знаний.

Область видимости данных. Локальные и глобальные величины

Применение модульного принципа построения программ в алгоритмических языках за счет использования отдельных модулей-подпрограмм задает иерархическую (с учетом вхождения) структуру не только программного кода, но и доступа к данным. Часть кода программы, где некоторая величина доступна пользователю и он может оперировать с ней, называется ее областью видимости.

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

Все имена, описанные в заголовках или разделах описаний подпрограмм (процедур и функций) называют локальными, т.е. они доступны для пользователя исключительно в своем блоке. Таким образом, областью видимости локальных переменных является только тот блок, в котором они описаны. За его границами их значение не определено. В том числе, локальными являются формальные параметры подпрограмм.

Практически все глобальные имена хранятся в области памяти, которая называется сегментом данных (статическим сегментом) программы. Эта область создается на этапе компиляции программы и действительна в течение всего времени ее работы. В Паскале размер сегмента данных программы составляет 65520 байт.

В отличие от глобальных, локальные переменные хранятся в специальной области памяти, которая называется стек. Она создается каждый раз при входе в подпрограмму и уничтожается при выходе из нее. Максимальный объем стековой памяти в Паскале также составляет 65520 байт.

В программе из примера 1 п.7.2 величины x,y,z,c,ord_value, описанные в разделе описаний внешней программы, являются глобальными. Формальные параметры процедуры x,y,ord_val, заданные в ее заголовке, являются локальными, их область видимости составляет только процедура order. Сходство наименований глобальных и локальных переменных x,y не вызывает ошибок при выполнении программы. Единственное неудобство заключается в том, что при расчетах в процедуре order глобальные переменные x,y “не видны” за соответствующими локальными.

1. Что называют областью видимости данных ?

2. Какие имена в программе называют глобальными, где помещают их описание, какова их область видимости ?

3. Какие величины программы называют локальными, где они описаны и какова их область видимости ?

4. Как на практике организовано хранение глобальных и локальных данных при работе программы ?

Практическое задание.

1. Исправить код программы из примера 1 п.7.2 таким образом, чтобы локальные переменные процедуры order не перекрывали глобальные переменные.