Gömülü C – 6 : Lezzetli Dosya Formatı

Opratörlerden sonra, sizlere de bizlere de bir nefes aldıracak bir konuya değineyim istedim. Kafalarımızı dinlendirmek için araya güzel bir konu sıkıştırıyorum. C dilinde yazılacak bir yazılım için dosya formatı nasıl olursa yakışıklı olur ona değineceğim. Malumunuz C’de, terbiyemizi takınarak yazdığımız yazılımlarda, uzantısına göre iki çeşit dosya oluyor: c ve h dosyaları. Bunların adam akıllı organizasyonu, seneler içinde edinilen bilgi ve tecrübeler vesilesiyle, ibretlik bilgiler içeren bir hal alıyor. Ben de bu bilgiyi burada sizlere aktarmaya çalışacağım.

Her yiğidin bir yoğurt yiyişi vardır demişler. Dosya formatı mevsusu da bu mevzuya epeyce benzer. Her yiğit yoğurdu başka yiyebilir ama güzel yoğurt her zaman güzel yoğurttur. Ben de güzel bir yoğurdu, kendi tarzımla sizlere sunacağım. Öyleyse haydi başlayalım!

Not:Bu vesileyle bu yazının temasının yoğurt olduğunu bilgilerinize arz etmek isterim.

Source (Kaynak) Dosyaları

  • Kaynak dosyalarının uzantısı: *.c olmalıdır. Örneğin yogurt.c
  • Dosya isminde Türkçe karakter kullanmazsanız, yoğurdunuz ekşimez.
  • Dosya adları açık ve anlaşılabilir olmalıdır. Dosya adını kısa yazmanın Murphy dışında kimseye bir faydası yoktur.
  • Dosya adı küçük harflerle başlamalıdır. Örneğin YaRaLiKaRiZmA34.c gibi ergen isimlendirmeleri ile yapılan yoğurttan cacık bile yapılmaz.
  • Dosyanın uzantısı da küçük c olamalıdır. ayran.C gibi isimlendirmeler, cehalete delalet eder. Yapmamak lazım, çirkinleşmeye hiç gerek yok.
  • Yerel, lokal, private(umumi olmayan) elemanlar statik tanımlanmalıdır.
  • Extern sözcüğü, yoğurttaki zararlı bir bakteri çeşididir. Onsuz da güzel yoğurt yapılabilir.

Çok güzel ahkam kestim ama farkındayım ki vakit, lafa karnı tok olan siz değerli okuyucuma lezzetli bir yoğurt sunma vaktidir.

Sevgili okuyucu, yukarıdaki kod şablonunu ingilizce yazdım ama lütfen kırılmayın darılmayın. İngilizce bilmiyorsanız bile çeviri ile anlamlarını öğrenmek çok çok kolay. Öyle kompleks şeyler yazmadım. Önceden dediğim gibi bir yazılımı yazarken tek bir insan dilinde yazmak lazım. Ben, terminoloji İngilizce olduğundan ve profesyonel hayatımda da kodları İngilizce istediklerinden formatı İngilizce olarak paylaşıyorum. Dana yoğurdu deyip Angus yoğurdu göstermiş olabilirim ama beni anlayacağınızı biliyorum. Kızmayın, darılmayın, trip atmayın.

Yukarıdaki formatı incelediğimizde, formatın sayısız ibretler içerdiğini görebilirsiniz. Bir kere başlıklar filan bir ilginç. Bazılarınıza bu güzel yoğurt tanıdık geldiyse dilinizin ucundaki sözcüğü ben söyleyeyim. DOXYGEN!!! Kanlıca yoğurdunu, pudra şekeri olmadan yemek nasıl tarihi bir hata ise, bir dosyadaki yorumları DOXYGEN’i sallamadan yapmak da o derecede talihsiz bir hatadır. Nitekim Doxygen ile yazan bir üstad’ın yoğurdu, camış yoğurdu gibi taş gibi olacaktır. Kodu yazan bu büyük üstad, kodun dökümantasyonunu da aradan çıkarmış olacaktır. Şimdi ben Doxygen dedim ama burada onu anlatmayacağım. Çünkü tonla kaynak var ve öğrenmek çok kolay. Sadece haberiniz yoksa, duyduysanız ama çok önemsemediyseniz diye bir değineyim istedim.

Yukarıdaki define satırı da aslında yoğurttaki zararsız bir bakteri gibi görünüyor ama aslında bu zararsız bakteri, sayısız hastalığa iyi gelir. Eğer modüler bir tasarım yaptıysanız her bir dosyayı bir mini modül gibi düşünmek isteyebilirsiniz. Bu yukarıdaki define size, bir modül projenizde var mı yok mu anlama imkanı sunar. Başka bir kaynak dosyasında #ifdef SAMPLE_C diyerekten o varsa şunu yap, yoksa da yoğurt yapmaktan vazgeçme bunu yap diyebilirsiniz. Bu gibi nice ibret, bu yoğurttaki bu bakterinin, faydalı bir bakteri olduğunu bizlere göstermektedir.

Devam edecek olursak, defines & macros kısmı görürüz. Bi dakka! Define ifadelerinin h dosyasında olması gerekmez mi? Evet ne yazık ki yanlışlıkla koymuşum onu C dosyasına demeyeceğim çünkü bunun da ibretlik bir sebebi var. bazı makrolar ya da define’lar, diğer modülleri de ilgilendirecek onların da işine yarayebilecek şeyler olduklarından, umuma hizmet açısından bu define’lar h dosyasına konur. Ama bazı makrolar, define ifadeleri de vardır ki, onlar yiğidin yatak odası gibidir, dışarı açılmaları hoş olmaz (?). Neyse konuyu saptırmayayım, tıpkı değişkenler ve fonksiyonlar gibi, makroları da dışarıya açmamayı seçebilirsiniz, bu durumda bu makrolar C dosyasında tanımlanır.  Mevzuyu daha da uzatmayacağım, anladınız siz onu.

Dosyanın geri kalanını çok detaylı açıklamayacağım. Static olan fonksiyonlar umuma açık olmayan fonksiyonlar oluyor. Yoğurdu yemek için içindeki bakterilerle tanışıp çay partisi yapmaya gerek yok. Static olan bu fonksiyonlar, modülün iç meseleleri. Static olmayanlarsa umuma hizmet olarak, dışarıya açılan elemanlar. Bunlar da yoğurdun kaymağı. Static olmayan fonksiyonların prototipleri, h dosyasında yer alacak. Fonksiyon prototipini yazmak, derleyiciye “bak haberin olsun bro, böyle bi fonksiyon var sonra duymadım etmedim deme” demek olduğundan, umuma duyurulacak fonksiyonların prototipleri doğal olarak h dosyasında yer alır. Static fonksiyonların prototipleri de c dosyasında yer alır. Static fonksiyon prototipinin h dosyasında yer aldığı durum da vardır ve ibretlik bir durumdur ama çok çok istisnai olduğundan onu yok saymak hakkımızdır. Nedenleriniz çok kuvvetli değilse yapmayın etmeyin. Kanlıca yoğurdu gibi dosya formatı var. Monalisa tablosunun kopyası gibi, al evine duvarına as.

Header (Başlık) Dosyası

  • Başlık dosyalarının uzantısı: *.h olmalıdır. Örneğin yogurt.h
  • Kaynak dosyalarının isimlendirilmesindeki maddeler, 2. maddeden itibaren aynen geçerlidir.

Yukarıdaki başlık dosyasının hikmetlerinin bir çoğunu artık anlayabiliyorsunuz. Bir tek aşağıdaki kısmı açıklayayım:

Bazen, dostlar; bir kaynak dosyası istemeden de olsa aynı header dosyasını iki defa çağırabilir. Örneğin bizim kaynak dosyamız olan cacik.c, yogurt.h ve hiyar.h’ı include etsin. Eğer hem yogurt.h hem de hiyar.h dosyaları içerde yemek.h dosyasını include ediyorsa, bizim cacik.c aslında yemek.h dosyasını iki defa include etmiş olur. Bu da çok tatsız bir yoğurt yiyiş şeklidir ve besin zehirlenmesine sebep olabilir. Bunu engellemek için yukarıdaki ifdef yapısı kullanılır. Bu durumda header dosyası iki defa çağırılsa dahi ilk çağırmada defined olmayan H_SAMPLE, defined olacağından bir daha bu header dosyasının içine girilmez yani aslında bu header iki defa include edilemez. Bu da bir yiğide yakışan bir yoğurt yeme şeklidir.

Bendeniz, zat-ı alilerinize, dosya formatları hususundaki bakışımı aktardım. Artık bunu yorumlamak veya ilerletmek sizlere kalmış. Yazıyı okuduğunuz için teşekkürler 🙂

Şimdi devam…

Önceki Sayfa   Sonraki Sayfa

 

5 thoughts on “Gömülü C – 6 : Lezzetli Dosya Formatı

  1. Serhat

    Yiğid başından Ali eksik olmaz
    Rumeli gazileri
    Kelle verilir aman verilmez.

    Yiğidim diyene yoğurdun hasını yemek yakışır 🙂

    Ellerine sağlık abi, çiçek çiçek.

  2. Serhat

    Yiğid başından Ali eksik olmaz
    Rumeli gazileri
    Kelle verilir aman verilmez.

    Yiğidim diyene yoğurdun hasını yemek yakışır 🙂

    Ellerine sağlık abi, çiçek çiçek.

  3. Mehmet Murat Oğuz

    Ya bu kadar güzel üslupla daha önce bu konuları hiç böyle açıdan birilerinden dinlememiştim. Bağımlılık yaratıyor. Ellerinize sağlık çok lezzetli olmuş 🙂 .

Leave a Reply