Глобальные и локальные данные
Структура программы
Структура программы. Глобальные и локальные данные (области видимости и время жизни)
Любая программа на языке C++ представляет собой одну или множество функций. Среди этих функций должна обязательно присутствовать главная функция main (), являющаяся точкой входа в программу (выполнение программы начинается с выполнения этой функции).
Основное требование по использованию функций состоит в том, что определение любой функции должно предшествовать ее вызову (компилятору необходимо “знать”, как вызвать ту или иную функцию: какое значение она возвращает, что собой представляют ее параметры). Возникновение коллизий, связанных с этим правилом, разрешается использованием прототипов функций.
В языке C++ отсутствует понятие вложенных функций, то есть внутри определять другие функции нельзя.
В языках программирования очень большое значение имеют понятия область видимости и время жизни объектов программы.
Область видимости это часть текста программы, в котором может быть использован данный объект.
Время жизни переменной - интервал выполнения программы, в течение которого программный объект существует в памяти.
Оба эти понятия тесно связаны с понятием блока программы. Блоком в программе является последовательность объявлений или операторов, заключенных в фигурные скобки {}. Существуют два типа блоков:
1) составной оператор;
2) определение функции.
Блоки могут включать в себя составные операторы и другие блоки, но не могут содержать определения функции, то есть внутри функции нельзя определить другую функцию.
Объекты, объявленные вне блоков, обычно называют глобальными объектами. С этой точки зрения все функции программы являются глобальными объектами. Время жизни функций – все время выполнения программы. Область видимости функций начинается с точки ее объявления (это определение самой функции или объявление ее прототипа) и заканчивается при завершении программы. Кроме функций на глобальном уровне можно определять и другие программные объекты – константы, переменные, типы данных и т.д. Их время жизни и область видимости также начинаются с точки объявления.
Переменные и другие программные объекты, определенные внутри блока называют локальными объектами. Временем жизни таких объектов обычно является блок, в котором эти объекты определены. Область видимости локальных объектов – промежуток между объявлением локального объекта и концом блока, в котором эти объекты определены. В функции все формальные параметры и другие объекты, которые определены внутри тела функции являются локальными. Почти все они создаются в памяти (в стеке) на время работы функции и уничтожаются при ее завершении.
Рассмотрим пример:
int I = 10; // Глобальная переменная
…….
void F ( int a ) // Параметр а – локальная переменная
{
cout << I; // На экране 10 – значение глобальной переменной I
……
if ( I ) // Анализируется значение глобальной переменной I
{
int I = 200, J = 3000; // Локальные переменные
cout << I; // На экране 200 – значение локальной переменной I
…….
}
cout << I; // На экране 10 – значение глобальной переменной I
cout << J; // Ошибка – переменной J больше не существует
……
}
При совпадении имен глобального и локального объекта локальный объект “перекрывает“ глобальный объект (в нашем примере – переменные I).
Время жизни и область видимости локальных переменных, определенных на уровне заголовка цикла for, – весь оператор for:
for ( int a = 0, b = 10; a < 20; ++ a, -- b)
{
…….
cout << a * b;
…….
}
Здесь, хотя переменные a и b определены вне блока, их можно использовать внутри блока тела цикла.
Областью видимости и временем жизни программных объектов можно управлять, используя модификаторов классов памяти.