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

86 Глава 2

Вывод этого примера:

Описание полученных результатов

Первые два оператора объявляют и определяют две целочисленных переменных, countl и count3, с начальными значениями 10 и 50 соответственно. Обе эти пере- менные существуют, начиная с этой точки и до закрывающей скобки в конце про- граммы. Область видимости этих переменных также распространяется до закрываю- щей скобки в конце main ().

Помните, что время жизни и область видимости переменной — разные вещи. Важно не пу- тать эти два понятия. Время жизни — это период во время выполнения программы, начи- ная с момента первого объявления переменной до момента ее уничтожения и освобождения занятой ею памяти для другого использования. Область видимости переменной — это часть программного кода, в которой переменная доступна.

Вслед за определением переменной значение countl выводится на экран, что дает первую из строк, показанных выше. Далее идет новая открывающая фигурная скобка, с которой начинается новый блок. Две переменных, countl и count2, определены в этом блоке, со значениями 20 и 30 соответственно. Переменная countl, объявленная здесь, отличается от первой переменной countl. Первая countl все еще существу- ет, но ее имя замаскировано второй переменной countl. Любое упоминание имени countl после объявления внутри вложенного блока ссылается на countl, объявлен- ную в этом блоке.

Я использовал дублированное имя переменной count 1 здесь только для того, чтобы проиллю- стрировать, что произойдет. Хотя этот код совершенно легален, он не является примером правильного подхода к программированию. При разработке реальных программ это приве- дет к путанице, и если вы используете дублированные имена, то очень легко нечаянно скрыть переменные, определенные во внешней области видимости.

Значение во второй строке вывода демонстрирует, что внутри вложенного блока обращение к имени countl означает обращение к переменной, имеющей область ви- димости этого блока, то есть объявленной во внутренних фигурных скобках:

Данные, переменные и вычисления 87

Если бы здесь использовалась внешняя переменная count 1, то было бы выведено ее значение — 10. Далее значение count 1 увеличивается следующим оператором:

Инкремент касается переменной, имеющей внутреннюю область видимости блока, поскольку внешняя все еще сокрыта. Однако count 3, которая была определена во внеш- ней области видимости, увеличивается в следующем операторе без всяких проблем:

Это доказывает, что переменные, объявленные в начале внешней области види- мости, доступны также и во вложенной области. (Обратите внимание, что если бы count3 была объявлена после закрывающей скобки вложенного блока, она бы также существовала во внешней области видимости, но в этом случае она бы еще не суще- ствовала во вложенном блоке.)

После закрывающей скобки вложенного блока count2 и внутренняя переменная countl прекращают существовать. Переменные countl и count3 по-прежнему нахо- дятся во внешней области видимости, и отображаемые значения доказывают, что зна- чение count3 было увеличено во вложенном блоке.

Если вы снимите комментарий со следующей строки:

то программа не станет корректно компилироваться, потому что попытается об- ратиться к несуществующей переменной. В этом случае вы получите сообщение об ошибке вроде следующего:

Это потому, что в этой точке count2 вышла из своей области видимости.

Размещение объявлений переменных

Вам предоставляется значительная свобода в том, где помещать объявления ваших переменных. Наиболее важный аспект, который следует при этом учитывать — это ка- кова должна быть область видимости этой переменной. Помимо этого, обычно сле- дует размещать объявление переменной поближе к тому месту, где она будет впервые использована в программе. Вы должны писать свои программы так, чтобы максималь- но облегчить их понимание другими программистами, и объявление переменной не- посредственно перед первым ее использованием весьма поможет в достижении этой цели.

Можно поместить объявление переменной вне любой функции, входящей в про- грамму. В следующем разделе будет рассказано о последствиях таких объявлений.

Глобальные переменные

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