NİŞANTAŞI ÜNİVERSİTESİ Algoritma ve Programlama Ön İşlemciler NİŞANTAŞI ÜNİVERSİTESİ © Mühendislik Mimarlık Fakültesi mmf.nisantasi.edu.tr
NİŞANTAŞI ÜNİVERSİTESİ © Önişlemiciler Şimdiye kadar tek bir yapı halinde ele aldığımız C derleyicileri aslında, iki ayrı modülden oluşmaktadır: 1. Önişlemci Modülü 2. Derleme Modülü Önişlemcinin bilgisayarın işlemcisi ya da başka bir donanımsal elemanıyla hiçbir ilgisi yoktur, önişlemci belirli bir iş gören bir yazılım programıdır. Önişlemci, kaynak program üzerinde birtakım düzenlemeler ve değişiklikler yapan bir ön programdır. Önişlemci programının bir girdisi bir de çıktısı vardır. Önişlemcinin girdisi kaynak dosyanın kendisidir. Önişlemci programın çıktısı ise derleme modülünün girdisini oluşturur. NİŞANTAŞI ÜNİVERSİTESİ ©
NİŞANTAŞI ÜNİVERSİTESİ © Önişlemiciler C programlama dilinde # ile başlayan bütün satırlar önişlemci programa verilen komutlardır (directives). # karakterinin sağında bulunan sözcükler ki bunlara önişlemci komutları denir. (preprocessor directives), önişlemciye ne yapması gerektiğini anlatır. Önişlemci program önceden belirlenmiş bir komut kümesindeki işlemleri yapabilir. Her bir komut # atomunu izleyen bir sözcükle belirlenir. Önişlemci komutlarını belirleyen yukarıdaki sözcükler C dilinin anahtar sözcükleri değildirler. Sıra derleyiciye geldiğinde zaten bunlar önişlemci tarafından kaynak metinden silinmiş olurlar. NİŞANTAŞI ÜNİVERSİTESİ ©
NİŞANTAŞI ÜNİVERSİTESİ © Önişlemiciler #include önişlemci komutu Bu önişlemci komutunun genel sentaksı aşağıdaki gibidir: #include <dosya ismi> ya da #include "dosya ismi" #include komutu, ile ismi verilen dosyanın içeriği bu komutun yazıldığı noktaya yapıştırılır. Bu komut ile önişlemci belirtilen dosyayı diskten okuyarak komutun yazılı olduğu yere yerleştirir. Bu komutla yapılan işi metin editörlerindeki copy – paste işlemine benzetebiliriz. Neden Başlık Dosyaları Kullanıyoruz? Özellikle büyük programların modül ismi verilen ayrı ayrı parçalar halinde yazıldığını biliyorsunuz. Bu modüllerden bazılarının amacı diğer modüllere hizmet vermektir. C dilinde genel hizmet verecek kodlar yani modüller genel olarak iki ayrı dosya halinde yazılır. Fonksiyon tanımlamaları, global değişken tanımlamaları uzantısı .c olan dosyada yer alır. Bu dosyaya uygulama dosyası (implementation file) denir. Modüle ilişkin kullanıcı kodları ilgilendiren bildirimler ise bir başka dosyada tutulur. Bu dosyaya başlık dosyası (header file) denir. Bir başlık dosyası bir modülün arayüzüdür (interface). Modül dışarıyla olan ilişkisini arayüzü ile kurar. Verilen hizmetlerden faydalanacak kullanıcı kodlar (client codes) hizmet veren kodların (server codes) kendisini değil yalnızca arayüzünü görür. Hizmet alan kodlar hizmet veren kodların arayüzlerine bağlı olarak yazılır. Böylece hizmet veren kodların kendisi ile arayüzleri birbirinden net olarak ayrılmış olur. NİŞANTAŞI ÜNİVERSİTESİ ©
NİŞANTAŞI ÜNİVERSİTESİ © Önişlemiciler #define Önişlemci Komutu #define önişlemci komutunun işlevi metin editörlerindeki bul ve değiştir özelliği (find - replace) özelliğine benzetilebilir. Kaynak kod içerisindeki bir yazıyı başka bir yazı ile değiştirmek için kullanılır. #define Önişlemci Komutu Neden Kullanılır Sembolik sabitler yazılan kodun okunabilirliği ve algınalabilirliğini artırır. Bu komutla bazı sabitlere isimler verilerek, bu sabitlerin ne amaçla kullanıldığı hakkında daha fazla bilgi verilebilir. 2. Bir sabitin program içerisinde pek çok yerde kullanıldığı durumlarda, bu sabite yönelik bir değiştirme işlemi tek yerden yapılabilir. Böylece söz konusu program bir sembolik sabite bağlı olarak yazılıp, daha sonra sembolik sabitin değiştirilmesiyle farklı parametrik değerler için yeniden derlenerek çalıştırılabilir. 3. Sayısal sabitlerin kullanılmasında tutarsızlıkları ve yazım yanlışlarını engeller. NİŞANTAŞI ÜNİVERSİTESİ ©
NİŞANTAŞI ÜNİVERSİTESİ © kaynaklar Brian W. Kernighan , Dennis M. Ritchie, (1988), C Programlama Dili – ANSI C, DAISYSCIENCE, Editor: Dr. Rifat Çölkesen . Necati Ergin, C Ders Notları, C ve Sistem Programcıları Derneği NİŞANTAŞI ÜNİVERSİTESİ ©