# C Öğreticisi 22(Başlık Dosyaları)

Bu yazılar [www.tutorialspoint.com/cprogramming/](http://www.tutorialspoint.com/cprogramming/) adresindeki yazı dizilerinin çevirileridir.

Başlık dosyaları, “.h” uzantısı ile biten C fonksiyon tanımlamaları ve makro tanımlamalarını içeren birkaç kaynak dosya arasında paylaşılan dosyalardır. İki tip başlık dosyası vardır: programcının yazdığı başlık dosyaları ve derleyici ile gelen başlık dosyaları.

Bir başlık dosyasına kullanmak için C önişlemcisine #include yönergesini vermelisiniz, tıpkı derleyicinizle gelen stdio.h başlık dosyasını içerdiği gibi.

Bir başlık dosyasını dahil etmek başlık dosyasından içeriği kopyalamaya eşittir ama bunu yapmadık çünkü bu hataya sebep olur ve başlık dosyasındaki içerikleri kaynak koda kopyalamak iyi bir fikir değildir, özellikle de programda birden çok kaynak kodunuz varsa.

C ve C++ basit pratiklerinde programlar sabitleri, makroları, sistem genelindeki global değişkenleri ve fonksiyon prototiplerini başlık dosyalarında tutmamız ve bu başlık dosyalarını gerek olan yerlere eklememiz şeklinde çalışır.

## Include(Dahil et) Sözdizimi <a href="#id-7733" id="id-7733"></a>

\#include yönergesi, geçerli kaynak dosyanın geri kalanına devam etmeden önce C önişlemcisini belirtilen dosyayı girdi olarak tarayarak çalışır. Önişlemciden çıktı, önceden oluşturulmuş çıktıyı ve ardından dahil edilen dosyadan çıkan çıktıyı ve onun da ardından #include yönergesinden sonra metinden gelen çıktıyı içerir.

Örneğin, eğer baslikDosyam.h isimli bir başlık dosyası açtıysanız -

> char \*test (void);

ve ana program o başlık dosyasını kullanan program.c -

> int x;
>
> \#include “baslikDosyam.h”
>
> int main (void) {
>
> puts (test ());
>
> }

Derleyici program.c’yi şöyle çalıştırır

> int x;
>
> char \*test (void);
>
> int main (void) {
>
> puts (test ());
>
> }

## Sadece Bir Kez Başlıklanabilirler <a href="#id-5717" id="id-5717"></a>

Bir başlık dosyası iki kez dahil edilirse, derleyici içeriğini iki kez işler ve hataya neden olur. Bunu önlemenin standart yolu, dosyanın tüm gerçek içeriğini şu şekilde bir koşulda işlemektir -

> \#ifndef BASLIK\_DOSYASI
>
> \#define BASLIK\_DOSYASI
>
> tüm başlık dosyasının dosyası
>
> \#endif

Bu yapı yaygın olarak #ifndef sargısı olarak bilinir. Başlık tekrar eklendiğinde, koşul yanlış olacaktır, çünkü BASLIK\_DOSYASI tanımlanmıştır. Önişlemci dosyanın tüm içeriğini atlar ve derleyici dosyayı iki kez görmez.

## Hesaplanmış İçerme <a href="#a7ac" id="a7ac"></a>

Bazen programınıza dahil edilecek birkaç farklı başlık dosyasından birini seçmek gerekebilir. Örneğin, farklı işletim sistemlerinde kullanılacak yapılandırma parametrelerini belirtebilirler.

Aşağıdaki koşul serileri ile bunu yapabilirsiniz -

> \#if SYSTEM\_1
>
> \# include “system\_1.h”
>
> \#elif SYSTEM\_2
>
> \# include “system\_2.h”
>
> \#elif SYSTEM\_3
>
> …
>
> \#endif

Ancak büyüdükçe sıkıcı hale gelir, bunun yerine önişlemci başlık adı için bir makro kullanma yeteneği sunar. Buna hesaplanmış içerme denir. #include öğesinin doğrudan argümanı olarak bir başlık adı yazmak yerine, buraya bir makro adı koyabilirsiniz -

> \#define SYSTEM\_H “system\_1.h”
>
> …
>
> \#include SYSTEM\_H

SYSTEM\_H genişletilecek ve önişlemci system\_1.h dosyasını #include ilk başta bu şekilde yazılmış gibi arayacaktır. SYSTEM\_H, Makefile tarafından -D seçeneği ile tanımlanabilir.

<https://www.tutorialspoint.com/cprogramming/c_header_files.htm>
