Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 45
Недавние изменения в стандарте Си++ коснулись областей видимости переменных, объявленных внутри операторов типа for. Например, следующий код приведет к ошибке компиляции:
Ошибка возникнет вследствие того, что переменная i видима только внутри блока, соответствующего циклу for. Чтобы исправить положение, нужно объявить i вне оператора for: ■^■'■V-,:;^®
Хотя это изменение не является существенным для вас, как для начинающего, в свое время оно повергло в шок многих ветеранов программирования на Си++. В конце концов, не имеет большого значения, какая форма принята в качестве стандарта, пока мы, программисты, знаем правила.
Наконец, мы переходим к переменной х, объявленной вне функции main() (строка 4). Поскольку эта переменная объявлена вне всех функций, она называется глобальной переменной (global variable) и имеет глобальную область видимости (global scope). Это означает, что переменная х доступна всюду в программе: внутри функции main(), внутри цикла while и внутри функции CountLoops().
Как было упомянуто раньше, локальная переменная перекрывает глобальную. Но что делать, если вы хотите обратиться к глобальной переменной х из функции main()? Для этого нужно использовать оператор разрешения видимости (scope-resolution operator), ::. Этот оператор содержится в строке 23 листинга 2.3:
cout « "Global х = " « ::х << endl;
Оператор разрешения видимости сообщает компилятору, что нужно взять значение глобальной переменной х, а не локальной. (Этот оператор используется также при работе с классами, но я расскажу об этом позже, когда мы перейдем к изучению классов.)
Реальные приложения обычно состоят из нескольких файлов исходного текста. (Термины модуль (module, unit) и исходный файл (source file) взаимозаменяемы. Я расскажу о многомодульных программах очень кратко.) Глобальные переменные, объявленные в одном из исходных файлов, являются глобальными для этого файла, но не видимы в других модулях. Однако бывают ситуации, когда переменная должна быть доступна из любого модуля программы. Для этого нужно выполнить два действия. Во-первых, объявить переменную в одном из исходных файлов как обычную глобальную переменную. Затем во всех остальных файлах, где она должна быть видима, нужно снова объявить эту переменную с ключевым словом extern: