Лабораторна робота № 10. Область дії і час життя змінних

Мета:

Здобути навики використання середовища розробки мови C++, створити проект, що пояснює область дії і час життя змінних, здобути навички написання програм.

Короткі теоретичні відомості до роботи.

Кожна базова змінна крім атрибутів: ім’я, тип розмір, значення, може мати і інші атрибути, що задають їм область дії та час життя. Для визначення цих атрибутів в С++ є чотири специфікації класу пам’яті, що визначені ключовими словами: auto (автоматичний), register (регістровий), extern (зовнішній), static (статистичний).

Область дії змінної є область програми, де можна посилатися на її ідентифікатор. Область життя (існування) - область програми, при виконанні якої змінна існує у пам’яті комп’ютера. Ці області не завжди співпадають.

auto та register використовуються для оголошення змінних з локальним часом життя. Такі змінні створюються у блоці з фігурними дужками в момент їх оголошення й зникають при виході із блоку. Спеціфікатор auto встановлюється за замовчуванням й в явному вигляді застосовується рідко (наприклад, auto float p;). Спеціфікатор register вказує компілятору зберегти змінну у високошвидкісному регістрі, але компілятор може це проігнорувати. Автоматичний клас пам’яті - економить пам’ять, тому що локальні змінні створюються у блоку та при виході із цього блоку знищуються.

Клас пам’яті extern використовується для оголошення змінних з глобальним часом життя. Пам’ять для них виділяється у момент оголошення та зберігається до закінчення програми. Після їх оголошення на них може посилатися будь-яка функція. Спеціфікатор extern для глобальних змінних, такий як auto для локальних. Він встановлюється за замовчуванням.

Всередині блоку перевага відається місцевій локальній змінні. Наприклад, коли змінна int I оголошена глобальною, то повторне оголошення всередині блоку задає вже іншу, локальну, змінну з тим же ідентифікатором, а доступ до глобальної змінної переривається до виходу із блока. Тож правило переваги “внутрішній змінній ” перед “зовнішній” дотримується для локальних змінних, що оголошені у вкладених блоках.

Локальні змінні з атрибутом static доступні тільки у тому блоці, де вони оголошені, але зберігаються до кінця виконання програми.

У широкому сенсі функція теж є змінною, по визначенню класу extern. Оголошення функції – запис її прототипу обов’язково до першого виклику. Аргументи функції – локальні змінні для блока-функції.

При використані глобальних змінних всередині функції треба пам’ятати, що при некоректному складанню програми виклик цієї функції може змінити їх значення.

Для пояснення дії атрибута static розглянемо варіант функції ch (chance – випадок): “генератор випадкових чисел” з прототипом: double ch().

Функція повертає псевдовипадкове число в інтервалі (-1, 1). Локальна змінна mn у тілі забезпечена атрибутом пам’яті static. При першому виклику функції mn задається числом (mn =5). У процесі виконання значення mn змінюється, та отримує нове значення, яке зберігається до наступного виклику функції.

При цьому змінна mn повз функції ch недоступна. Функція записана у файлі SUBPROG\ch.cpp та оформлена як бібліотечна у списку roll.h. Розглянемо програму з багаторазовим викликом ch та результат її виконання.

/*файл SUBPROG\ch.cpp – Генератор випадкових чисел від -1 до 1*/


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow