Если инициализируется только часть элементов перечисления, то те элементы перечисления, которые указаны после инициализированных, будут получать возрастающие значения, отсчитываемые от того значения, которое они получили при инициализации. В следующем фрагменте элемент STOP будет инициализирован значением 21.

enum times{SAVE=10,SLEEP=20,STOP};

Области видимости и имена

Объявление вводит имя в область видимости. Это значит, что имя может использоваться только в определенной части текста программы, и, где именно будет использоваться объявленное имя, зависит от того, в каком месте программы оно было объявлено.

Для имени, объявленного в теле функции ( локальное имя), область видимости начинается с места объявления и заканчивается там, где заканчивается блок, внутри которого было объявлено имя. Блоком считается фрагмент кода, заключенный в фигурные скобки.

Имя называется глобальным, если оно объявлено вне любой функции или класса. Область видимости глобального имени простирается от места объявления до конца файла, содержащего объявление. Внешнее по отношению к текущему блоку имя, как глобальное, так и локальное, может быть перекрыто (то есть подменено) объявлением этого же имени внутри текущего блока. В этом случае в памяти образуется два или более разных объектов с одним и тем же именем. То есть имя внутри блока может быть замещено и будет ссылаться на другую область памяти. При выходе из блока имя восстанавливает свое значение. К замещенному глобальному имени можно обратиться при помощи оператора::. К скрытому локальному имени обратиться невозможно. Этот механизм иллюстрируется в упражнении.

Упражнение 4.1 (продолжение)

19. Добавить в программу код, приведенный в листинге 4.9. Нужно при этом объявить соответствующую функцию и добавить еще одну ветвь case.

Листинг 4.9

// Блок 16

void f4(){

//В начале файла объявлена глобальная переменная mm, указывающая на массив

//типа char, то есть на массив символов, то есть на строку. Устанавливая

//первым элементом массива 0, мы показываем, что это строка пустая. Затем,

//при помощи функции strcat, мы добавляем к этой строке строку Hello, Global

//Word! с символом переноса на другую строку \n.

mm[0] = \0;

strcat(mm, «Hello, Global Word! \n»);

//Снова объявляем переменную mm, чем скрываем имя глобальной переменной mm.

//Теперь обращаясь к mm, мы обращаемся к локальному имени, указывающему на

//другую область памяти. В эту другую область мы записываем строку Hello,

//Local Word!

char mm[256];

mm[0] = \0;

strcat(mm, «Hello, Local Word! \n»);

//К строке из локальной переменной mm, мы дописываем строку из глобальной

//переменной mm, обращаясь к глобальной переменной при помощи оператора

//разрешения области видимости::

strcat(mm,mm);

mbstowcs(mstr, mm, 256);

szStr = mstr;

}

Комментарии в тексте поясняют действие кода. После запуска программы нужно нажать клавишу 4. На экран будет выведено следующее сообщение:

Hello, Local Word! Hello, Global Word!

Перейти на страницу:

Похожие книги