• baslik dosyasi
    c\c++ da functionlarin constantlarin structure ve classların icinde tanımlandığı h uzantili dosyalar
    (orn: windows.h)
  • (bkz: header)
  • özet:c/c++ dilinde derleyicinin kullanımı için ve de insanlar makro tanımlayabilsin amacıyla kullanılan dosyalardır.

    c/c++ dilinde .h uzantısı ile temsil edilirler.ne işe yaradığını çoğu kişi söyleyemez.isterseniz c/c++ biliyorum diyene net olarak şu soruyu sorun.nedir,ne amaçla kullanılır?

    şöyle efendim mesela siz

    şöyle bir şey yazdınız.

    ....

    int main(){

    printf("%s","bildiğin düz yazı işte");
    return 0;
    }
    ....

    şimdi bu dosyayı bir c derleyicisine veriyorsunuz bu haliyle,size diyor ki printf() ne kardeşim?ben printf falan bilmem benim bileceğim tek şey dilin sentaksıdır beni de alakadar eden yer buradır diyor.siz etme tutma kardeşim bu standart kütüphane fonksiyonudur desenizde nafile,işte o zaman derleyici diyorki syntax a uydur,bak #include <hede.h> şeklinde bir notasyonum var sen böyle yaparsan ben anlarım ki bu bir hazır fonksiyon,adam yazım hatası yapmış mı paramatreleri doğru girmiş mi fonksiyon çağırırken ben ona bakayım madem diyor ve da dan herşeyi düzgün yapmışsanız tamam kardeşim al sana bu derdini işletim sistemine anlatacak makina kodu* diyor ve bunun içinde de sizin kütüphaneyi çağırıp,kullanma amacı taşıyan kodunuz bulunuyor efendim.yani kardeşlerim anlayacağınız o .h uzantılı dosyaların kullanım amacı budur.ha şunu iyi anlayın ki onlar sadece bir tanımdır* zinhar gerçek iş yapan kısım değildir*,bu dosyalaraın içinde fonksiyonların prototipleri ve makrolar bulunur.(bkz: prototip)
    başka bir kullanım amacı da bu dillerde makro denen bir kavram vardır ki hiç girmeyecem orasına -ki kendileri fonksiyonların yerine kullanılır bazen- bu yapıyı kotarmak** için de .h dosyaları elzemdir.

    şimdi siz bir program yazdınız ,programınız derlendi artık .h dosyalararını silseniz programınıza bişeycik olmaz,lakin program üzerinde tekrar derleme* ,düzeltme yapacaksanız .h dosyaları nerede sorusunu sorar size derleyiciniz.umarım derdimi güzel anlatıyorrumdur.neyse devam edelim.
    geldik derlenmiş kodunuzun nasıl çalışacağına hani derleyici al buyur sana yazdığın kaynak kodun platformuna göre(platform=os+architecture) makina kodu diyordu ha o şeyi sen de işletim sistemine verirsin kardeş al şunda ne yazıyorsa bana bunları bi yaptırıver dersin,o da keyfi yeterse(security vs) otur hele bir soluklan sen der.açar dosyanı memory e yükler.şimdi geldik sizin printf() olayınıza.program memorye yüklenirken bu sırada bu adama c/c++ runtime gerekir diye işletim sisteminiz onu da en baştan hafızanın* bir yerine yükler,printf() satırına gelince akış runtime* kısmına verilir ve çalışacak kodlarınız runtime kısmının size sonuç dönmesini bekler.siz c/c++ runtime kısmını bilgisayardan silerseniz doğal olarak ,ben ne istediğini anlayamadım der işletim sistemi size ve programınızı kapatır.mesela windows da görürsünüz microsoft visual c++ redistriburable package falan diye efendim onlar işte sizin runtime ortamınızdır ve diğer programlarınıza hizmet vermekle mükelleftirler.onların size zararı yoktur, kaldırmayın işiniz düştükçe işinizi yaparlar sadece.aynı şeyler linux/os x de falan da benzer şekilde varlardır ve hayatlarına devam ederler.çünkü nedir efendim c/c++ bir standartlar* bütünüdür.yok benim keyfim böyle istedi olmuyor maalesef.artık basif bir printf() fonksiyonun başından geçen süreçleri biliyorsunuz.

    .h dosyalarını kullanacağınızı derleyiciye şu notasyonla anlatırsınız
    #include <hedehödü.h> yada
    #include "hedehödü.h" şeklinde ilk kullanımda derleyici anlar ki bu adamın ** dosyaları önceden sistemin bir yerine konmuş gidip oraya bakayım der,ikincisinde ise kaynak kodunuzun olduğu klasörden aramaya başlar orada bulamazsa aynı klasörün alt taraflarını da didikler* daha da bulamazsa kardeş hele bi göstersene diye size sorar ha bazı ideler sormaz bile bulamadım der çıkar şuraya.

    gavurcanız iyiyse şurada çok da güzel açıklanmış stackoverflow linki

    bir de bağlayıcı* kavramı vardır ki evlere şenlik.amacı basitçe derleyici size makina kodu veriyordu ya ha o makina kodunu sizde linkera verirsiniz kardeşim şuralarda kullandığım kütüphane* fonksiyonlarını bi gör oku da benim program runtime da çakılmasın denilir,başka ca bir görevi de farklı farklı program parçalarını bir araya getirir. tam olarak adı üstünde tanımına uyar bu açıdan.burada anlatmak istediğim kavramı assemblydilini görmüş olanlar anlayacaktır.hani nasıl linkera şöyle diyordunuz link a.obj +b.obj linker da size executable halini veriyordu aynı mantık işte.aynı kavram c/c++ da da var.

    son olarak bir şeyi de eklemeden edemeyeceğim bazı insanlar şöyle düşünür efendim benim programımı bir kişi çalıştırmak isterse ve de makinasında oldu ya runtime ortamı yoksa programım çakılmasın diye ne yapar biliyor musunuz size verdiği programın içine runtime ortamını da ekleyip size verir.hali ile de programın boyutu büyür.ama çalışır mı çalışır yani.mesela, deneyin basitçe bir printf() yazın ve statik olarak link yapın bakalım o küçücük programın boyutu ne kadar olacak? ben yaptım 1mb ı geçiyor programınız yani sadece printf() i kullanmak için böyle oluyor. normalde 3-5 kb birşey oluyor programınız geri kalan runtime için.ya böyle olur mu demeyin evet aynen böyle oluyor.tabiki yer israfı yani bu yaklaşım kullanacak kişi bir zahmet runtime kuruversin.çok özel bazı durumlarda bu yaklaşım kullanılabilir.

    kafanızda canlansın diye de şu gösterime bakabiirsiniz.resim
    şurada
    kısa bir türkçe açıklama mevcut.
  • #ifndef ile başlar #endif ile biter.

    araya #define, #typedef... #include alır.

    kendi dosya adını bile define eder.

    bur bir .c dosyasının başında zikrettiğin zaman h dosyasının içeriğini koymuş olursun.

    bir daha unutmamak dileğiyle
hesabın var mı? giriş yap