CodeBlanks Logo Icon CodeBlanks

Header ve kaynak

  • C kursu
  • Orta seviye
  • Ders 59/116
  • 5 dk

.h ve .c dosyaları arasındaki farkı öğrenirsin.

Header ve kaynak dosyalar

C projeleri iki tür dosyaya bölünür: header (.h) ve kaynak (.c). Header, fonksiyon bildirimlerini ve tür tanımlarını taşır; kaynak, fonksiyon tanımlarını içerir. Başka bir .c dosyası header'ı #include ile ekler ve bildirilen fonksiyonları çağırır.

Örnek: math_utils.h içinde int add(int, int); bildirimi, math_utils.c içinde int add(int a, int b) { return a + b; } tanımı olur. Bu ayrım büyük projelerde derleme süresini azaltır ve modülerlik sağlar; her modül kendi başlığıyla gelir.

Include guard

Bir header birden çok kez eklendiğinde çift bildirim hatası oluşur. Bunu önlemek için include guard kullanılır: #ifndef MATH_UTILS_H, #define MATH_UTILS_H, içerik, #endif.

İlk eklemede MATH_UTILS_H tanımsızdır; #ifndef doğru olur, makro tanımlanır ve içerik işlenir. İkinci eklemede makro tanımlıdır; #ifndef yanlış olur ve içerik atlanır. Modern C'de #pragma once de kullanılır; daha kısa ama derleyiciye özgüdür. Include guard standart ve taşınabilirdir.

Uygulama Header ve main yaz

Tek dosyada simüle et: #ifndef MATH_H, #define MATH_H, int add(int, int); bildirimi, #endif. Sonra int add(int a, int b) { return a + b; } tanımı. int main(void) içine printf("%d\n", add(3, 4)); ekle. <stdio.h> başlığını unutma.

Başlangıç kodu

main.c
#include <stdio.h>

// MATH_H include guard başla
// add fonksiyonunun bildirimi
// include guard kapat

// add fonksiyonunun tanımı

int main(void) {
    // add(3, 4) çağır ve yazdır
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

#ifndef MATH_H
#define MATH_H
int add(int, int);
#endif

int add(int a, int b) {
    return a + b;
}

int main(void) {
    printf("%d\n", add(3, 4));
    return 0;
}

Beklenen çıktı

7

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Fonksiyon tanımı hangi dosyada olur?

  • Sadece .c'de Doğru cevap
  • Sadece .h'de
  • Hem .h hem .c'de
  • Makefile'da

Açıklama: Tanım .c'de, bildirim .h'de olur.

2 Include guard makrosunu tamamla

Soru
#ifndef UTILS_H
#____ UTILS_H
int util_add(int, int);
#endif
Cevap
#ifndef UTILS_H
#define UTILS_H
int util_add(int, int);
#endif

Açıklama: #define UTILS_H makroyu tanımlar ve tekrar eklemeyi engeller.

3 Dosya türlerini içeriğine eşle

Kavram Anlamı
math_utils.h Bildirimler
math_utils.c Tanımlar
main.c Program girişi
Makefile Derleme tarifleri

Orta seviye bölümündeki tüm dersler