русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Правила області дії


Дата додавання: 2014-11-28; переглядів: 790.


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

  • Як написати оголошення, тож змінні оголошено належним чином під час компіляції?
  • Як оголошення огранізовано, тож усі частини буде з'єднано як слід під час завантаження програми?
  • Як оголошення організовано, тож існуватиме лише одна копія?
  • Як започаткувати зовнішні змінні?

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

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

Область дії зовнішньої змінної або функції триває, починаючи з моменту їх було оголошено і аж до кінця компільованого файла. Наприклад, якщо main, sp, val, push і pop означено у одному файлі, у послідовності, вказаній нижче:

main() { ... }

 

int sp = 0;

double val[MAXVAL];

 

void push(double f) { ... }

 

double pop(void) { ... }

тоді змінні sp і val можуть бути використаними у push і pop просто шляхом виклику їхньої назви; додаткові оголошення зайві. Але ці назви не бачить main, так само вона не бачить pop іpush.

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

Важливо розрізняти оголошення зовнішніх змінних і їхні визначення. Оголошення заявляє про властивості змінної (головним чином її тип); визначення також виділяє простір для зберігання. Якщо рядки

int sp;

double val[MAXVAL];

з'являться зовні будь-якої функції, вони визначають зовнішні змінну sp і val, виділять місце для їхнього зберігання, також служать оголошенням для решти даного вихідного файла. З іншого боку, рядки

extern int sp;

extern double val[];

оголошують для решти вихідного файла, що sp являється int і val є масивом типу double(чий розмір визначено десь у іншому місці), але вони не створюють самих змінних чи виділяють місце для їхнього зберігання. Кожний файл, що входить в програму, повинен містити тільки одне визначення зовнішніх змінних; інші файли можуть містити оголошення з extern, щоб дістатися до них. (Можливі також оголошення extern у самому файлі, що містить ці визначені змінні.) Розміри масивів повинні бути вказаними з визначеннями, але не обов'язкові з extern-оголошеннями.

Ініціалізація зовнішньої змінної відбувається тільки за умови, що існує її визначення.

Хоча це не характерно для такої програми, але функції push і pop могли би бути визначиними у одному файлі, тоді як змінні val і sp визначено і ініційовано у іншому. В такому разі, такі визначення і оголошення потрібно би було зв'язати разом:

у першому файлі:

extern int sp;

extern double val[];

 

void push(double f) { ... }

 

double pop(void) { ... }

у другому файлі:

int sp = 0;

double val[MAXVAL];

Оскільки оголошення extern у першому файлі знаходяться попереду і зовні визначень функцій, вони стосуються всіх функцій. Одного оголошення вистачить для цілого першого файла. Така сама організація була би потрібною, якби sp і val слідували за своїм використанням у тому самому файлі.


<== попередня лекція | наступна лекція ==>
Зовнішні змінні | Файли заголовка


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн