Програми можуть розбиватися на частини і з інших міркувань, аніж робота з бібліотеками класів. У загальному випадку проект розробляється групою програмістів. Розмежувавши круг задач, поставлених перед кожним, можна розв’язок кожної проблеми виділити у вигляді окремого файлу. Такий підхід дозволяє краще організувати роботу команди і більш чітко визначити взаємодію частин програми.
До того ж, у відповідності з принципами технології програмування, великі програми розбиваються на частини згідно з функціональною спрямованістю. В одному файлі може міститися код підтримкм графічного виведення, в іншому – математичні розрахунки, ще в іншому – дисковий ввід/вивід. При розробці великих програм тримати всі ці частини в одному файлі може бути складно або й зовсім неможливо.
Міжфайлові змінні
Згадаємо: ми декларуємо (оголошуємо) просту змінну, задаючи її тип та ім’я. Це не означає, що ми для неї відразу ж резервуємо місце в пам’яті. Оголошення змінної просто повідомляє компілятор про те, що десь у програмі може зустрітися змінна з певним іменем і певного типу. Змінна визначається, коли під неї в пам’яті резервується місце, де записуватиметься будь-яке її значення.
Більшість оголошень є також і визначеннями. Єдиним оголошенням простої змінної, що не є її визначенням, є оголошення з використанням зарезервованого слова extern
extern int somevar;
Щоб змінна, визначена в одному файлі, була видима в іншому, треба оголошувати її у всіх інших файлах за допомогою цього слова.
Міжфайлові функції
Оголошення функції задає її ім’я, тип даних, які вона повертає, і типи її аргументів. Визначення функції – це оголошення плюс тіло функції.
Коли компілятор генерує виклик функції, йому не потрібно знати, як вона працює, натомість потрібні її ім’я, тип і типи її аргументів. Все це міститься в оголошенні функції. Тому можна оголошувати функцію в одному файлі, а створювати її виклики з іншого. Ніяких додаткових дозволів (типу extern) не потрібно.
Міжфайлові класи
Класи відрізняються від простих змінних тим, що визначення класу не передбачає резервування пам’яті, воно тільки інформує компілятор, що саме входить в клас.
Щоб мати доступ до класу з будь-якого файлу, що входить до проекту, необхідно визначити клас в кожному файлі. Це зручно робити за допомогою заголовочних файлів.