Son Güncelleme: 26 Şub, 2026

C++ programları yazarken, özellikle büyük projelerde, kodunuzu birden çok dosyaya ayırmak okunabilirlik ve bakım açısından çok önemlidir. Bu genellikle başlık dosyaları kullanmayı içerir; bu dosyalar .h veya .hpp uzantılarına sahiptir. Peki bu ikisi arasındaki fark nedir ve hangisini kullanmalısınız?
Bu makalede, .h ve .hpp dosyaları arasındaki farkları inceleyecek, tarihçelerini keşfedecek ve en iyi uygulamalar hakkında rehberlik sunacağız.
C++‘ta Başlık Dosyalarını Anlamak
Başlık dosyaları, fonksiyonlar, sınıflar, sabitler ve makrolar için bildirimler içerir ve bu bildirimleri birden çok kaynak dosyasında kullanabilirsiniz. Bu dosyalar, .cpp (C++ kaynak) dosyalarına #include yönergesiyle eklenir.
Başlık Dosyalarının Yaygın İçerikleri
- Sınıf tanımları
- Fonksiyon bildirimleri
- Sabit tanımları
- Makrolar
- Şablonlar (bazı durumlarda)
.h Dosyaları
.h Dosyası Nedir?
.h dosyaları geleneksel başlık dosyalarıdır ve ilk olarak C programlama dilinde yaygın olarak kullanılmıştır. Hem C hem de C++ projelerinde arayüzleri bildirmek için hâlâ kullanılmaktadır.
Kullanım Örneği:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Artılar:
- Evrensel olarak tanınır (hem C hem de C++‘ta kullanılır).
- Hem C hem de C++ kodu içeren projeler için uygundur.
Eksiler:
- C++ projelerinde dosyanın C tarzı mı yoksa C++ tarzı mı olduğu konusunda belirsizlik yaratabilir.
.hpp Dosyaları
.hpp Dosyası Nedir?
.hpp dosyaları C++‘a özgü başlık dosyalarıdır. .h dosyalarıyla aynı işlevi görür, ancak başlığın C++ kodu için olduğunu açıkça belirtmek için kullanılır.
Kullanım Örneği:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Artılar:
- Dosyanın C++ kodu için olduğunu net bir şekilde gösterir.
- C ve C++ karışık kullanıldığında karışıklığı önler.
- Karma dil projelerinde veya sıkı adlandırma kuralları izleyen ekiplerde faydalıdır.
Eksiler:
- Eski kod tabanlarında biraz daha az yaygındır.
.hbekleyen bazı eski sistemler tarafından tanınmayabilir.
.h vs .hpp: Temel Farklar
| Özellik | .h Dosyası | .hpp Dosyası |
|---|---|---|
| Dil İlişkisi | C ve C++ | Sadece C++ |
| Gelenek | Gelenek | Gelenek |
| C++ Projelerinde Kullanım | Yaygın | Bazıları tarafından netlik için tercih edilir |
| Şablon Desteği | Evet | Evet |
| Kod Belirsizliği | Karışık dil projelerinde mümkün | Daha az olası |
.h ve .hpp Seçiminde En İyi Uygulamalar
İşte seçim yapmanıza yardımcı olacak bazı genel yönergeler:
.h kullanın eğer:
- Kodunuzun hem C hem de C++ ile uyumlu olması gerekiyorsa.
- Zaten
.hkullanan eski bir kodu sürdürüyorsanız veya genişletiyorsanız.
.hpp kullanın eğer:
- Dosyanın C++‘a özgü olduğunu açıkça belirtmek istiyorsanız.
- Sadece C++ projesinde çalışıyorsanız veya sınıflar, şablonlar ve ad alanları gibi C++‘a özgü özellikler kullanıyorsanız.
Yaygın Proje Yapıları
.h ile Örnek:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
.hpp ile Örnek:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Her iki yapı da geçerlidir; fark esasen açıklık ve ekip tercihine bağlıdır.
Sonuç
.h ve .hpp arasındaki seçim büyük ölçüde gelenek meselesidir, işlevsellik değil. Her ikisi de aynı amacı hizmet eder: birden fazla C++ kaynak dosyası arasında arayüzleri ve paylaşılan kodu bildirmek.
Ancak, C++‘a özgü kod için .hpp kullanmak niyetinizi daha net ortaya koyar ve özellikle çok dilli büyük kod tabanlarında karışıklığı önlemeye yardımcı olur. Karışık dil veya eski projelerde ise .h hâlâ tercih edilebilir.
Ana Çıkarım:
.hppkullanın, “bu sadece C++ kodudur” mesajını vermek istediğinizde —.hile kalın, C ve C++‘ın bir arada kullanıldığı ortamlarla çalışıyorsanız.