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
#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
#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
#ifndef UTILS_H
#____ UTILS_H
int util_add(int, int);
#endif
#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 |