BÖLÜM 6: ÖNİŞLEMCİ
#include <conio.h> #define PI 3.14159265358979323846 #define DEGIS(x,y,tip) { tip t; t = x; x = y; \ y = t; } #ifdef EOF # define SON EOF #else # define SON (-1) #endif #ifndef MAKS # define MAKS(p,q) ((p)>(q) ? (p) : (q)) #endif #define OZEL static /* … */ #undef OZEL #if (HDUZ & 0x40) != 0 printf("satir = %d\n", __LINE__); #endif
Bu bölümde hemen her zaman C derleyicisi ile birlikte kullanılan
ayrı bir işlemci
ye göz atacağız. Bu; derlenmeden önce kaynak
dosyalarımızı metin yönünden önişlemeye tabi tuttuğu için bu şekilde
adlandırılan, C önişlemcisidir. Önişlemciyi, kaynak dosyalarımızı alıp,
verilen önişlemci emirlerine göre yeni bir dosya oluşturan bir düzenleyici
şeklinde düşünebiliriz. Kabaca durum şöyledir:
stdio.h
+
benim.h
+
prog.c
→
ÖNİŞLEMCİ
→
C DERLEYİCİSİ
→
amaç kod
Önişlemci aslında derleyici ile bütünleşmiştir, yani genelde ayrı bir sistem programı değildir.
Bir önişlemci emrini ile sıradan bir C deyimini ne ayırır? İlk
olarak, farklı sözdizimi. İkinci olarak da, satırın başındaki sayı
işareti (#
). Genelde, emirler bir satır tutarlar; ancak
bir satır, sonuna bir ters bölü işareti (\
) konularak, bir
sonraki satıra devam ettirilebilir. Ayrıca emrin sonunda noktalı virgül
olmadığına dikkat edin.
Emirler hiçbir zaman derleyici tarafından görünmezler. Önişlemci,
emirleri çıkarıp yerlerine istenen işlemleri yapar. Örneğin, bir
#include
emri içeren satır yerine emirde belirtilen dosyanın
içeriği konulur. Önişlemci emirleri herhangi bir satıra konabilirler,
ancak önişlemci açıklamaları atladığı için, açıklamaların içine
konulamazlar.
Bu bölümün geri kalan kısımlarında, önişlemci emirlerini ayrıntılı olarak açıklayacağız.