Son Güncelleme: 26 Şub, 2026

Başlık - .h vs .hpp: Farkı Nedir ve Hangisini Kullanmalısınız?

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.
  • .h bekleyen bazı eski sistemler tarafından tanınmayabilir.

.h vs .hpp: Temel Farklar

Özellik.h Dosyası.hpp Dosyası
Dil İlişkisiC ve C++Sadece C++
GelenekGelenekGelenek
C++ Projelerinde KullanımYaygınBazıları tarafından netlik için tercih edilir
Şablon DesteğiEvetEvet
Kod BelirsizliğiKarışık dil projelerinde mümkünDaha 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 .h kullanan 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:

.hpp kullanın, “bu sadece C++ kodudur” mesajını vermek istediğinizde — .h ile kalın, C ve C++‘ın bir arada kullanıldığı ortamlarla çalışıyorsanız.

İlgili İçerikler