Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

88 Глава 2

Глобальные переменные также по умолчанию имеют статическое время жизни. Глобальные переменные со статическим временем жизни существуют с момента нача- ла выполнения программы и до момента ее завершения. Если вы не специфицируете начальное значение глобальной переменной, то по умолчанию она инициализируется нулем. Инициализация глобальных переменных происходит перед началом выполне- ния функции main (), поэтому они всегда доступны в любой части кода, находящейся внутри области видимости переменной.

На рис. 2.12 показано содержимое исходного файла Expample. срр, и стрелками указана область видимости каждой переменной.

Puc. 2.12. Области видимости переменных

Переменная valuel, которая появляется в начале файла, объявлена с глобаль- ной областью видимости, как и value4, которая появляется после функции main (). Область видимости каждой глобальной переменной простирается от точки ее опре- деления до конца файла. Даже несмотря на то, что value4 существует в момент на- чала выполнения программы, к ней нельзя обратиться из тела main (), потому что main () не находится в ее области видимости. Для того чтобы main () могла обратить- ся к переменной value4, ее объявление следует переместить в начало файла. Обе переменные — и valuel, и value4 — по умолчанию будут инициализированы нулем, что отличает их от автоматических переменных. Обратите внимание, что локальная переменная по имени valuel в function () скрывает глобальную переменную с тем же именем.

Поскольку глобальные переменные продолжают существовать столько, сколько работает программа, это может вызвать вопрос: "Почему бы не сделать все перемен- ные глобальными и избежать неприятностей, связанных с исчезновением локальных переменных?". На первый взгляд это кажется привлекательным, но, как и в случае с Сиренами из мифологии, у такого решения были бы серьезные побочные эффекты, которые полностью перевешивают любые возможные преимущества.

Реальные программы обычно состоят из множества операторов, существенного количества функций и огромного числа переменных. Объявление всех переменные глобальными значительно увеличивает риск непреднамеренной их модификации, а также существенно затрудняет работу по их именованию. К тому же они будут зани- мать память в течение всего времени выполнения программы. Сохраняя переменные локальными по отношению к функции или блоку, вы можете быть уверенными, что они почти полностью защищены от внешних эффектов, потому что они существуют и занимают память, только начиная с точки их объявления и до завершения включа- ющего блока. При этом становится легче управлять всем процессом разработки.

Если в ввзглянете на панель Class View (Представление классов) в правой части окна IDE для любого примера из тех, что были рассмотрены до сих пор, и развернете дерево классов проекта, щелкнув на знаке +, то увидите там элемент по имени Global Functions and Variables (Глобальные функции и переменные). Если щелкнуть на нем, можно увидеть список всего того в вашей программе, что имеет глобальную область видимости. Это включает все глобальные функции, а также все объявленные глобаль- ные переменные.

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

Операция разрешения контекста

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