08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Makro argümanı olarak bir dizge verilirse dizgenin başında ve sonunda yer alan çift<br />

tırnak (") karakterleri ve dizgenin içinde yer alan ters bölü (\) ve çift tırnak (")<br />

karakterinin önüne makro açılımında otomatik olarak ters bölü karakteri yerleştirilir.<br />

Aşağıdaki kodu inceleyin:<br />

#include <br />

#define print(x)<br />

printf(#x)<br />

int main()<br />

{<br />

print(Ekranda bu yazi gorulecek\n);<br />

print("Ekranda bu yazi cift tirnak icinde gorunecek"\n);<br />

print("\""\n);<br />

}<br />

return 0;<br />

Program derlenip çalıştırıldığında ekran çıktısı aşağıdaki gibi olur:<br />

Ekranda bu yazi gorulecek<br />

"Ekranda bu yazi cift tirnak icinde gorunecek"<br />

"\""<br />

Önişlemci Atom Birleştirme İşleci<br />

Önişlemci programın ikinci işleci "##" atom birleştirme işelecidir (tokenpasting operator).<br />

Atom birleştirme işleci iki terimlidir araek konumundadır. Parametreli ya da parametresiz<br />

makrolarda kullanılabilir. Terimlerinin, makro parametrelerinden biri olması zorunlu<br />

değildir. Önişlemci, atom birleştirme işlecinin terimlerini birleştirerek, terimlerinden tek<br />

bir atom yapar. Aşağıdaki örneği inceleyin:<br />

#include <br />

#define paste(x, y) x##y<br />

int main()<br />

{<br />

int paste(a,1);<br />

a1 = 10;<br />

printf("a1 = %d\n", a1);<br />

}<br />

return 0;<br />

Yukarıdaki örnekte, önişlemci program tarafından paste isimli makronun açılması sonucu<br />

a ve 1 makro argümanları birleştirilerek a1 atomu elde edilir.<br />

Bir Makro İle Bir İşlevin Aynı İsmi Paylaşması<br />

Bazı kütüphanelerde belirli işlevler aynı isimle hem makro hem de işlev olarak<br />

tanımlanırlar. Bundan amaçlanan, programcının isteğe bağlı olarak makro kullanımını ya<br />

da işlev çağrısını seçmesine olanak vermektir. Hem kare isimli bir makro tanımlanmış<br />

hem de kare isimli bir işlev bildirilmiş olsun:<br />

int kare(int);<br />

#define kare(a) ((a) * (a))<br />

Kaynak kodda aşağıdaki gibi bir deyim olsun:<br />

490

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!