Останнє оновлення: 26 лютого, 2026

Заголовок - .h vs .hpp: Яка різниця і який слід використовувати?

При написанні програм на C++, особливо у великих проєктах, організація коду в кілька файлів є важливою для читабельності та підтримки. Зазвичай це передбачає використання заголовочних файлів, які мають розширення .h або .hpp. Але у чому різниця між цими двома, і який варіант слід обрати?

У цій статті ми розглянемо відмінності між файлами .h та .hpp, їхню історію та надамо рекомендації щодо кращих практик.

Розуміння заголовочних файлів у C++

Заголовочні файли містять оголошення функцій, класів, констант та макросів, які можна підключати в кілька вихідних файлів. Ці файли потім включаються у файли .cpp (C++‑джерела) за допомогою директиви #include.

Типовий вміст заголовочних файлів

  • Оголошення класів
  • Оголошення функцій
  • Оголошення констант
  • Макроси
  • Шаблони (у деяких випадках)

Файли .h

Що таке файл .h?

.h – це традиційні заголовочні файли, які спочатку широко використовувалися в мові програмування C. Вони досі використовуються як у проектах на C, так і на C++ для оголошення інтерфейсів.

Приклад використання:

// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H

int add(int a, int b);
int subtract(int a, int b);

#endif

Плюси:

  • Універсально розпізнається (використовується і в C, і в C++).
  • Підходить для проєктів, що містять код як на C, так і на C++.

Мінуси:

  • Може викликати неоднозначність у C++ проектах щодо того, чи файл у стилі C, чи C++.

Файли .hpp

Що таке файл .hpp?

.hpp – це заголовочні файли, специфічні для C++. Вони працюють так само, як файли .h, але явно вказують, що заголовок призначений для коду C++.

Приклад використання:

// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP

#include <vector>

std::vector<int> filter_even(const std::vector<int>& input);

#endif

Плюси:

  • Чітко вказує, що файл призначений для коду C++.
  • Уникає плутанини при поєднанні C та C++.
  • Корисно у проектах з кількома мовами або в командах, що дотримуються строгих правил найменування.

Мінуси:

  • Трохи рідше зустрічається у старих кодових базах.
  • Не розпізнається деякими застарілими системами, які очікують .h.

.h vs .hpp: Ключові відмінності

ОсобливістьФайл .hФайл .hpp
Мовна асоціаціяC та C++Лише C++
Конвенція чи правило?КонвенціяКонвенція
Використання у C++ проектахЗвичайнеПереважно деякими за ясність
Підтримка шаблонівТакТак
Неоднозначність кодуМожлива у проектах з різними мовамиМенш ймовірно

Кращі практики вибору між .h та .hpp

Ось кілька загальних рекомендацій, які допоможуть вам визначитися:

Використовуйте .h, якщо:

  • Ви пишете код, який має бути сумісним і з C, і з C++.
  • Ви підтримуєте або розширюєте застарілий код, який вже використовує .h.

Використовуйте .hpp, якщо:

  • Ви хочете чітко вказати, що файл призначений лише для C++.
  • Ви працюєте в проєкті, що використовує лише C++, або застосовуєте специфічні можливості C++ (класи, шаблони, простори імен).

Типові структури проєктів

Приклад з .h:

project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp

Приклад з .hpp:

project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp

Обидві структури є валідними; різниця полягає головним чином у ясності та уподобаннях команди.

Висновок

Вибір між .h та .hpp здебільшого залежить від конвенції, а не від функціональності. Обидва типи файлів виконують одну й ту ж задачу – оголошення інтерфейсів та спільного коду для кількох вихідних файлів C++.

Проте для коду, специфічного для C++, використання .hpp може зробити ваші наміри зрозумілішими та допомогти уникнути плутанини у великих кодових базах, особливо коли мова йде про проєкти з кількома мовами. Для змішаних або застарілих проєктів .h може залишатися кращим варіантом.

Ключовий висновок:

Використовуйте .hpp, коли хочете явно позначити «це лише код C++» — залишайтеся з .h, якщо працюєте в середовищах, де поєднуються C і C++.

Дивіться також