Описание определяет имя в области видимости. Таким образом, имя может применяться только в некоторой части программы. Для имени, которое описано в функции (такое имя часто называют локальным), эта область видимости располагается от точки описания до конца блока, в котором появилось описание. Для имени не в функции и не в классе (называемого часто глобальным именем) область видимости находится от точки описания до конца файла, в котором появилось описание. Описание имени в блоке может прятать описание во внутреннем блоке или глобальное имя, т. е. можно переопределять имя внутри блока с целью ссылки на другой объект. После выхода из блока имя опять получает свое прежнее значение.Например:int x; // глобальное xf() {int x; // локальное x прячет глобальное x x = 1; // присвоить локальному x{int x; // прячет первое локальное xx = 2; // присвоить второму локальному x}x = 3; // присвоить первому локальному x}int* p = &x // взять адрес глобального xСкрытие имен обязательно при написании больших программ. Но читающий человек легко может не заметить, что имя скрыто, и некоторые ошибки, которые возникают вследствие этого, очень тяжело обнаружить, в основном потому, что они редкие. Применение для глобальных переменных имен i или x напрашивается на неприятности. С помощью операции разрешения области видимости:: можно применять скрытое глобальное имя. Например: int x;f(){int x = 1; // скрывает глобальное x::x = 2; // присваивает глобальному x}Однако возможности применять скрытое локальное имя нет. Область видимости имени начинается точкой описания. То есть имя можно применять даже для задания его собственного значения. К примеру:int x;f() {int x = x; // извращение}