Başlık dosyasının kullanımını bir örnek üzerinde incelemeye çalışalım:
#include <stdio.h> /* Başlık dosyası (printf() fonksiyonunun kullanılmasını sağlar) */
int main(void)
{
printf("C Programlama Dili");
return 0;
}
Yukarıdaki programı derleyip çalıştırdığımızda, ekrana aşağıdaki cümleyi yazar:
C Programlama Dili
Başlık dosyası kavramını yukarıdaki örnek üzerinden incelemeye çalışalım:
#include <stdio.h> /* Başlık dosyası */
Yukarıdaki satırda, kullanılan #include önişlemci direktifi, sağ tarafında yer alan <stdio.h> adlı başlık dosyasını program içine dahil etmemiz gerektiğini bildirir. Bu sayede, derleme işlemi başladığında, <stdio.h> başlık dosyası içeriği program içinde yazılmış gibi kullanılabilir hale gelir.
Böylece, <stdio.h> başlık dosyasını programımıza dahil ederek, printf()fonksiyonunu programımızda kullanabilme olanağına sahip oluyoruz.
Önişlemci direktifleri C programlarında yer alırlar ancak işlem satırı olarak işlem görmezler. Programın derlenme safhasından önce işlem görürler. Başka bir deyişle, derleme başlamadan önişlemci direktifinin gerektirdiği işlemler tamamlanmış olur.
Şimdi başlık dosyası ile kütüphane fonksiyonlarının arasındaki bağlantıyı incelemeye çalışalım. Bir başlık dosyasını programımıza dahil ettiğimizde, o başlık dosyasının bilgilerini içerdiği kütüphane fonksiyonu, programımız içinde yazılmış gibi kullanıma hazır olacaktır. Başlık dosyalarının programlara dahil edilmesi için ise #include önişlemci direktifi kullanılır. #include direktifi, önişlemcinin adı verilen başlık dosyasını okumasını ve bu dosyada geçen kütüphane fonksiyonlarını kullanım için hazır bulundurmasını sağlar.
Bu sistemde, kullanılmakta olan C/C++ derleyicileri ve IDE'leri hazırlanırken, ANSI standartlarına göre tanımlanmış olan bazı temel fonksiyonlar ile çok sık kullanılabileceği tahmin edilen ve günün ihtiyaçlarına göre miktarı değişebilen, IDE üreticileri tarafından hazırlanan fonksiyonlar, "Kütüphane Dosyaları" adı verilen ve .LIB uzantılı dosyalara yerleştirilir. Bu dosyalar derleyicinin belirli bir alt dizinine (genellikle lib adlı) yerleştirilir.
Kütüphane dosyaları içinde yer alan fonksiyonlara Kütüphane Fonksiyonları adı verilir.
Kütüphane fonksiyonlarının programlarda kullanılabilmesi için, fonksiyonlar hakkındaki başlık bilgileri, C derleyicisinin bir alt dizininde (genelde include adlı) bulunan ve uzantısı .H olan dosyalara yerleştirilmiştir. Bu dosyalara Başlık Dosyaları adı verilir.
Bir program içinde bir veya daha fazla başlık dosyası tanımlayabiliriz.
Başlık dosya tanımlamalarında bazen < > bazen de " " işaretleri kullanılabilir. Genellikle, derleyici ile birlikte gelen başlık dosyaları için < > işaretleri, kullanıcı tarafından tanımlanan ve derleyicinin ilk olarak .c uzantılı kaynak dosya ile aynı dizinde arama yapmasını sağlayan " " işaretleri kullanılır.
#include <stdio.h> // Derleyici ile gelen başlık dosyası
#include "eklenen.h" // Kullanıcı tanımlı başlık dosyası
Kullanıcı tanımlı başlık dosyasının kullanımını bir örnek üzerinde incelemeye çalışalım. Aşağıda gösterilen main.c, fonksiyonlar.c ve fonksiyonlar.h isimli üç adet dosya deneme adlı bir proje içinde yer almaktadır.
main.c kod dosyası
#include <stdio.h> /* Başlık dosyası (printf() fonksiyonunun kullanılmasını sağlar) */
/* fonksiyonlar.h başlık dosyası içinde bildirimi yapılan ve ana kodları fonksiyonlar.c
dosyasında yer alan fonksiyonların main.c dosyası içinde kullanımını sağlar. */
#include "fonksiyonlar.h"
int main(void)
{
int id;
printf("C Programlama Dili");
id = kare_al(5);
printf("\nid değişkeninin karesi: %d", id);
return 0;
}
fonksiyonlar.c kod dosyası
int kare_al(int id)
{
return id*id;
}
fonksiyonlar.h başlık dosyası
int kare_al(int id);
Yukarıdaki programı derleyip çalıştırdığımızda, ekrana aşağıdaki cümleyi yazar:
C Programlama Dili id değişkeninin karesi: 25
Projeyi derlediğimizde, main.c dosyası başında yer alan #include "fonksiyonlar.h" ifadesi, fonksiyonlar.h başlık dosyası içinde bildirimi yapılan ve ana kodları fonksiyonlar.c dosyada yer alan fonksiyonların main.c dosyası içinde kullanımını sağlar. Böylece, program main.c dosyası içinde fonksiyonlar.c dosyası içinde yer alan kare_al() fonksiyonunu kullanarak, 5 sayısının karesini alır.