Глобальная область видимости
Параметры функции
Параметры функции находятся в области видимости функции. Таким образом, они локальны по отношению к функции. За исключением того, что они приобретают значения аргументов, параметры ведут себя точно так же, как и другие локальные переменные.
Поскольку локальные переменные известны только внутри той функции, где они объявлены, у вас может возникнуть вопрос: каким образом создать переменную, которая будет известна нескольким функциям? Ответом является объявление переменной в глобальной области видимости. Глобальной областью видимости является декларативный район, находящийся вне всех функций. Объявление переменной в глобальной области видимости создает глобальную переменную.
Глобальные переменные известны на протяжении всей программы. Их может использовать любой участок кода, и они сохраняют свои значения в течение всего времени выполнения программы. Таким образом их область видимости простирается на всю программу. Вы можете создать глобальные переменные, объявив их вне всех функций. Поскольку эти переменные глобальны, к ним можно обращаться в любых выражениях, независимо от того, какие функции содержат эти выражения
Приведенная ниже программа демонстрирует использование глобальной переменной. Переменная countобъявлена вне всех функций. Ее объявление расположено перед функцией main(). Однако, его можно поместить в любом месте, но только не внутри функции. Поскольку, однако, вы должны объявлять переменную перед тем, как будете ее использовать, лучше всего располагать объявление глобальных переменных в самом начале программы.
// Использование глобальной переменной.
#include <iostream>
using namespace std;
void func1();
void func2();
int count; // Это глобальная переменная.
int main() {
int i; // Это локальная переменная
for(i=0; i<10; i++) {
count = i * 2 ; // Это обращение к глобальной count
func1 ();
}
return 0;
}
void func1 ()
{
cout << "count: " << count; //Обращение к глобальной переменной
cout << '\n'; // новая строка
funс2 () ;
}
void func2 ()
{
int count; // это локальная переменная
for(count = 0; count<3; count ++) cout << '.'; //Это обращение к локальной count.
}
Вывод программы выглядит так:
count: 0
...count: 2
...count: 4
...count: 6
...count: 8
...count: 10
...count: 12
...count: 14
...count: 16
...count: 18
Внимательно посмотрев на программу, легко заметить, что и main( ), и funcl( ) используют одну и ту же глобальную переменную count. В func2( ), однако, объявлена локальная переменная count. Функция func2(), используя count, обращается к своей локальной переменной, а не к глобальной. Важно усвоить, что если глобальная и локальная переменные имеют одно и то же имя, все обращения к имени переменной внутри функции, в которой объявлена локальная переменная, будут относиться к локальной переменной, и никак не влиять на глобальную. Таким образом, локальная переменная скрывает глобальную с тем же именем.
Глобальные переменные инициализируются при запуске программы. Если объявление глобальной переменной имеет инициализатор, тогда переменная принимает значение этого инициализатора. Если глобальная переменная не имеет инициализатора, ее значение делается равным нулю.
Место под глобальные переменные выделяется в фиксированном районе памяти, выделенном вашей программой специально для этой цели. Глобальные переменные удобны в тех случаях, когда одно и то же данное используется несколькими функциями вашей программы, или когда переменная должна сохранять свое значение в течение всего времени выполнения программы. Однако следует избегать чрезмерного увлечения глобальными переменными. К этому имеются причины:
§ Глобальные переменные занимают память в течение всего времени выполнения программы, а не только когда они действительно нужны.
§ Использование глобальной переменной в том месте, где годится локальная, снижает общность функции, так как она теперь зависит от объекта, который должен быть определен вне нее.
§ Использование большого числа глобальных переменных может привести к программным ошибкам из-за неизвестных или нежелательных побочных эффектов. Основная проблема при разработке больших программ заключается в возможности случайной модификации значения переменной в силу ее использования в каком-то другом месте программы. Такое может случиться в С++, если в вашей программе слишком много глобальных переменных.