Функції завжди визначаються глобально. Вони можуть бути оголошені з класом пам’яті static або extern. Оголошення функцій на локальному і глобальному рівнях мають однаковий сенс.

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

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

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