آخر تحديث: 26 Feb, 2026

العنوان - .h مقابل .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 مقابل .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++.

مواضيع ذات صلة