آخرین بهروزرسانی: 26 Feb, 2026

هنگام نوشتن برنامههای C++، بهویژه در پروژههای بزرگ، سازماندهی کد در چندین فایل برای خوانایی و نگهداری ضروری است. این معمولاً شامل استفاده از فایلهای سرآیند میشود که با پسوندهای .h یا .hpp عرضه میشوند. اما تفاوت این دو چیست و کدام را باید استفاده کنید؟
در این مقاله، تفاوتهای بین فایلهای .h و .hpp را بررسی میکنیم، تاریخچه آنها را مرور میکنیم و راهنماییهایی برای بهترین روشها ارائه میدهیم.
درک فایلهای سرآیند در C++
فایلهای سرآیند شامل اعلانها برای توابع، کلاسها، ثابتها و ماکروهایی هستند که میتوانید آنها را در چندین فایل منبع گنجانده (include) کنید. این فایلها سپس در فایلهای .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 مناسب باشد.
نکته کلیدی:
وقتی میخواهید نشان دهید «این فقط کد C++ است» از
.hppاستفاده کنید — اگر در محیطهایی کار میکنید که C و C++ را ترکیب میکنند، با.hادامه دهید.