Variable and procedure linkage

Видимість імен всередині і між модулями

Лінковка визначає видимість імені змінної, об'єкта чи процедури між одним або декількома модулями програми. Іншими словами, лінковка визначає, як ім'я розділяється між модулями. Є два основних типи лінковки, в результаті якої ім'я може мати: внутрішнє і зовнішнє.

Декларація модульної області видимості

Імена змінних і об'єктів, оголошені в області модуля мають внутрішнє зв'язування якщо вони не оголошені за допомогою з Extern або Common. Наприклад, імена змінних оголошені за допомогою з Dim або Static мають внутрішній зв'язок, і ці змінні можуть бути віднесені на ім'я тільки в модулі, в якому вони визначені. Зверніть увагу, що використання Shared дозволяє тільки видимість імен в межах процедур модуля, і не сприяє лінковке імен.

Ім'я процедур, оголошене за допомогою Private має внутрішню лінковку.

Декларація локальної області видимості

Всі імена змінних і об'єктів, оголошені в локальній області (в циклі Do. Або тілі процедури, наприклад) мають внутрішню лінковку.

Імена з зовнішньої лінковкою можуть посилатися на змінні, об'єкти або процедури, визначені в їх модулі або в іншому модулі. Зовнішня лінковка означає, що імена зовні видимі для інших модулів, і всі зовнішні імена, які використовують модулі, відносяться до тих же змінним, об'єктам або процедурам. Таким чином тільки один модуль може визначати зовнішнє ім'я (компілятор буде скаржитися на дубльовані визначення, якщо він знайде додаткове визначення імені з зовнішньої лінковкою).

Декларація модульної області видимості

Імена змінних і об'єктів, оголошені в області модуля мають зовнішню лінковку, а оголошуються Extern або Common.

Common декларує змінну з зовнішньої лінковкою, а також визначає її. Але на відміну від Extern. визначення змінної може з'явитися більш ніж в одному модулі. При використанні з масивами, тільки масиви змінної довжини без індексів можуть бути продекларовані, а розмір масиву вказується під час виконання з допомогою Dim або ReDim. перш ніж масив може бути використаний. Імена змінних і об'єктів із зовнішнім лінковкою, оголошені з використанням Common перебувають у спільній області якщо зазначений специфікатор Shared. Shared змінні можуть бути передані в рамках процедури.

Коли Extern і Common використовуються разом в одному модулі для декларації та визначення однієї змінної, ефект буде такий же, як замість Common буде Dim. Як правило, не рекомендується змішувати Extern і Common на ту ж змінну в одному модулі. Однак змінні можуть бути продекларовані і визначені в одному модулі з Common. а потім до них може бути звернення з Extern в іншому модулі без плутанини.

Декларація локальної області видимості

В даний час імена, оголошені в локальній області не можуть мати зовнішню лінковку.