1 Справочные данные по языку C++_____________________________633

Л Предупреждение ————————————————————————————————————

•    Каждый формальный параметр в определении шаблона должен хотя бы однажды появить-
|    ся в списке параметров функции. Каждое имя формального параметра в списке определе-

•    ния шаблона должно быть уникальным. Отсутствие ключевого слова class перед каждым
формальным параметром шаблона функции является ошибкой.

1.6 Области видимости переменных и функций

1.6.1 Правила, определяющие область видимости

Область видимости или область действия переменной или функции — это
сть программы, в которой на нее можно ссылаться. Например, когда мы объяв-
им локальную переменную в блоке (определение блока см. в разделе 11.4.2), на
' можно ссылаться только в этом блоке или в блоке, вложенном в этот блок. Су-
ствуют четыре области действия идентификатора — область действия функ-

».,чя, область действия файл, область действия блок и область действия прото-
тип функции.

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

Метки (идентификаторы с последующим двоеточием, например, start:) —
единственные идентификаторы, имеющие областью действия функцию. Метки
можно использовать всюду в функции, в которой они появились, но на них нельзя
ссылаться вне тела функции. Метки используются в структурах switch (как метки
case) и в операторах goto (см. разделы 11.8.1.2 и 11.8.1.3). Метки относятся к тем
| сталям реализации, которые функции «прячут» друг от друга. Это скрытие —

;'н из наиболее фундаментальных принципов разработки хорошего программно-
, .обеспечения.

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

Локальные переменные, объявленные в начале функции, имеют областью дей-
ствия блок так же, как и параметры функции, являющиеся локальными перемен-
ными.

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

1то, что они существуют с самого начала выполнения программы.
Из внутреннего блока можно получить доступ к одноименной глобальной пе-
ременной с помощью унарной операции разрешения области действия «::». Напри-
мер, выражение ::1 означает глобальную переменную I, даже если в данном блоке
объявлена локальная переменная I.

Единственными идентификаторами с областью действия прототип функ-
^ш являются те, которые используются в списке параметров прототипа функции