C - Preprocessor ( Ön işlemci ) Kavramı

13:48

  • Preprocessor derleyiciden önce çalışan bir programdir. Preprocessor C dilini bilmez, Makina koduna dönüştürme gibi bir yeteneği yoktur. Text düzenleme işlemleri yapmaktadır.

  • C'de fonksiyon ve değisken isimlerinin tamamı büyük harfle yazılmaz. Büyük harfle yazılmış bir isim görürsek bunun önişlemciye ilişkin bir atom olduğunu anlarız.

  • include anahtar sözcük değildir. Preprocessor #include (replace) işlemini yaptıktan sonra komutu siler. Dolayısıyla derleyici # ile başlayan hiçbir satırı görmeyecektir.
    • null directivedir, hata vermez. Hiçbir şey de yapmaz.

  • Belli başlı Preprocessor identifier'ları aşağıdaki gibidir:

#include

  • Preprocessor' ün "#include" komutu için yaptigi iş en basitinden kopyala - yapıştır işlemidir. " #include " ile başlayan bir satır gördügünde #include' dan sonraki dosyayi bulur ve #include' un oldugu satırı silerek buraya yapıştırır. 

Aşağıda foo.h dosyasının içeriği görülmektedir. header dosyasının içine ekrana çıktı veren bir main fonksiyonu yazılmıştır.

main.c içine ise sadece #include "foo.h" eklenmiştir. Ve görüldüğü gibi ekrana beklenen çıktı verimiştir. Yukarıda bahsedildiği gibi #include kabaca  kopyala - yapıştır işlemidir.


  • #include :Verilen dosyanın içeriğini bu komutun bulunduğu yere yapıştırılmasını sağlamaktadır. Dolayısıyla #include '' foo.txt '' de yazabiliriz. 

    • Standart başlık dosyaları derleyicilerin verdiği dosyalar açısal ( < > ) içine alınırken, 3. part başlık (header) dosyaları tırnak ( ''  '' ) içine alınmaktadır. Burada bu şekilde bir ayrıma gidilmesinin sebebi koda bakana bir algı oluşturmak amaçlanmıştır.



    • Derleyiciler genelde include adında bir klasör bulundururlar ve header dosyaları genelde bunların içinde bulunurlar.

    #define


    • İyi bir C programcısı Standart kütüphanenin define tanımlamalarının hangi başlık dosyasında define edildiğini bilmesi gerekir.

    • Preprocessor komutlarının sonuna " ; " konulmaz. Bazı noktalarda hataya yol açabilmektedir.



    • include komutunda preprocessor 'ün çalışma mantığı kodları yapıştırdı, baştan tekrar başladı ve o başlık dosyalarının içinde de komut varsa onları da tekrardan işleyecektir. Bir işlem yaptıktan sonra tekrar baştan başlamaktadır.

    • Preprocessor isminin farklı iki değere define edilmesi tanımsız davranıştır.

    • Preprocessor de identifier'ın karşılığı olarak bir şey yazılmazsa Preprocessor identifier'ı boş ifadeyle yer değiştirir.



    • Preprocessor identifier 'ı belirgin bir ifade olarak istemektedir. Bu nedenle sayısal bir ifadeyi identifier olarak kabul etmemektedir.