- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
88 Глава 2
Глобальные переменные также по умолчанию имеют статическое время жизни. Глобальные переменные со статическим временем жизни существуют с момента нача- ла выполнения программы и до момента ее завершения. Если вы не специфицируете начальное значение глобальной переменной, то по умолчанию она инициализируется нулем. Инициализация глобальных переменных происходит перед началом выполне- ния функции main (), поэтому они всегда доступны в любой части кода, находящейся внутри области видимости переменной.
На рис. 2.12 показано содержимое исходного файла Expample. срр, и стрелками указана область видимости каждой переменной.
Puc.
2.12. Области видимости переменных
Поскольку глобальные переменные продолжают существовать столько, сколько работает программа, это может вызвать вопрос: "Почему бы не сделать все перемен- ные глобальными и избежать неприятностей, связанных с исчезновением локальных переменных?". На первый взгляд это кажется привлекательным, но, как и в случае с Сиренами из мифологии, у такого решения были бы серьезные побочные эффекты, которые полностью перевешивают любые возможные преимущества.
Реальные программы обычно состоят из множества операторов, существенного количества функций и огромного числа переменных. Объявление всех переменные глобальными значительно увеличивает риск непреднамеренной их модификации, а также существенно затрудняет работу по их именованию. К тому же они будут зани- мать память в течение всего времени выполнения программы. Сохраняя переменные локальными по отношению к функции или блоку, вы можете быть уверенными, что они почти полностью защищены от внешних эффектов, потому что они существуют и занимают память, только начиная с точки их объявления и до завершения включа- ющего блока. При этом становится легче управлять всем процессом разработки.
Если в ввзглянете на панель Class View (Представление классов) в правой части окна IDE для любого примера из тех, что были рассмотрены до сих пор, и развернете дерево классов проекта, щелкнув на знаке +, то увидите там элемент по имени Global Functions and Variables (Глобальные функции и переменные). Если щелкнуть на нем, можно увидеть список всего того в вашей программе, что имеет глобальную область видимости. Это включает все глобальные функции, а также все объявленные глобаль- ные переменные.
Практическое занятие
Операция разрешения контекста
Как
вы уже видели, глобальная переменная
может быть скрыта локальной пере-
менной
с тем же именем. Однако все же остается
возможность получить доступ к
такой
глобальной переменной, используя
операцию
разрешения
контекста
(:
:),
которую
вы уже видели в главе 1,
когда
речь шла о пространствах имен. Я
продемон-
стрирую, как она работает,
на измененной версии последнего
примера: