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