Область видимости
Есть четыре вида областей видимости: локальная, файл, программа и класс.
Локальная: Имя, описанное в блоке (), локально в этом блоке и может использоваться только в нем после места описания и в охватываемых блоках. Исключение составляют метки (), которые могут использоваться в любом месте функции, в которой они описаны. Имена формальных параметров функции рассматриваются так, как если бы они были описаны в самом внешнем блоке этой функции. Файл: Имя, описанное вне любого блока () или класса (), может использоваться в файле, где оно описано, после места описания. Класс: Имя члена класса локально для его класса и может использоваться только в функции члене этого класса (), после примененной к объекту его класса () операции . или после примененной к указателю на объект его класса () операции -. На статические члены класса (.1) и функции члены можно также ссылаться с помощью операции :: там, где имя их класса находится в области видимости. Класс, описанный внутри класса (), не считается членом, и его имя принадлежит охватывающей области видимости.
Имя может быть скрыто посредством явного описания того же имени в блоке или классе. Имя в блоке или классе может быть скрыто только именем, описанным в охватываемом блоке или классе. Скрытое нелокальное имя также может использоваться, когда его область видимости указана операцией :: (). Имя класса, скрытое именем, которое не является именем типа, все равно может использоваться, если перед ним стоит class, struct или union (). Имя перечисления enum, скрытое именем, которое не является именем типа, все равно может использоваться, если перед ним стоит enum ().