Методичні вказівки до виконання практичних та лабораторних робіт з курсу «Обчислювальна техніка та програмування», страница 16

ОБЛАСТЬ ІСНУВАННЯ Й ВИДИМІСТЬ ЗМІННИХ

         КЛАСИ ПАМ'ЯТІ

Якщо клас пам'яті в операторах оголошення не вказаний, то компілятор визначає його автоматично в залежності від місця його використання. Так змінна проголошена всередині функції інтерпретується компілятором як автоматична (локальна auto) видимість якої залежить від версії, а час існування обмежений часом життя функції. Автоматичні змінні проголошені для версії С++5 видимі від місця оголошення до кінцевого оператора (заключної фігурної дужки), а для версій 3.11.. 4.5 видимість змінних визначається від місця оголошення в складеному операторі до кінцевого оператора (заключної фігурної дужки складеного оператора).

Змінна, певна до функції main (проголошена поза тілом функцій) інтерпретується компілятором як extern (зовнішня), і доступна будь-який функції програми даного файлу. При цьому якщо в програмі водночас присутня локальна і глобальна змінна з одним і тим же ім'ям, то діє правило локалізації ідентифікаторів. Згідно цьому правилу в функції, де визначена локальна змінна, буде недосяжна глобальна змінна з тим же ім'ям.

В залежності від явного або неявного оголошення класу пам'яті static (статична) компілятор С++ реагує по-різному. При явному оголошенні змінних з префіксом static вони містяться в сегменті даних і час їхнього існування обмежений часом виконання програми. При цьому якщо ці змінні проголошені поза функціями, то вони є глобальними і доступні будь-якій функції у межах файлу, де було вироблене оголошення і недосяжні з інших файлів проекту програми. При оголошенні змінних всередині функцій вони також містяться в сегменті даних з тим же часом життя, що і глобальні, але, по суті, вони залишаються локальними і доступні лише всередині функції.

В С++ 5 версії введені більш жорсткі обмеження на область існування змінних. Наприклад, якщо змінна проголошена всередині дужок циклу for, то область існування проголошеної змінної обмежена цим операторним блоком, а для версій нижче С++ 5 область існування простирається від оголошення цієї змінної до кінця файлу. Цей факт призводить до необхідності зміни вхідного тексту програми.

ОРГАНІЗАЦІЯ ВЗАЄМОДІЇ ФУНКЦІЙ У ПРОГРАМІ

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

В C++  визначено декілька засобів передачі параметрів функції і отримання результатів обчислення функції, викликаючою середою. Існує чотири засоби передачі параметрів функції: виклик функції з передачею значень; виклик функції з передачею адрес змінних; виклик функції з використанням механізму заслань при передачі параметрів; шляхом глобальних параметрів.

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

#include<iostream. h>

int sum (int, int);

void mane (void)

{int a, b, c;

cin >> a >> b;

c=sum (a, b);//передача параметрів значень

cout << c << endl;

}

int sum (int d, int l)

{

int f;

f=d+l;

return f;//результат передається в крапку виклику

}

Виклик функції з передачею адрес. Цей засіб передачі параметрів забезпечує передачу в стек адрес що передаються даними, це дозволяє функції працювати безпосередньо з даними.

#include<iostream. h>