08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

#else<br />

printf("standart C derleyicisi degil\n");<br />

#endif<br />

return 0;<br />

}<br />

[C++ derleyiclerinde de __cplusplus öntanımlı simgesel değişmezi, tanımlanmış kabul edilir.]<br />

#line Önişlemci Komutu<br />

Bu önişlemci komutuyla derleyicinin kaynak koda ilişkin tuttuğu satır numarası ve dosya<br />

ismi değiştirilebilir. Bu komut iki ayrı argüman alabilir.<br />

Komutun alabileceği birinci argüman bir tamsayı olarak satır numarasıdır. Komutun<br />

seçimlik olarak alabileceği ikinci argüman dosya ismini gösteren dizgedir.<br />

Bu önişlemci komutu kaynak kod üreten programlar tarafından kullanılabilir.<br />

#line önişlemci komutu size anlamsız gelebilir. Neden derleyicinin vereceği hata iletisi<br />

örneğin 20. satırı değil de 25. satır göstersin? Neden derleyici hata iletisinde derlediği<br />

kaynak dosyanın ismini değil de bir başka dosyanın ismini yazdırsın?<br />

#line komutu programcılardan çok, çıktı olarak C kaynak kodu üreten programalar<br />

tarafından kullanılır. Aşağıdaki programı derleyerek çalıştırın:<br />

#include <br />

int main()<br />

{<br />

printf("%s dosyasının %d. satırı\n", __FILE__, __LINE__);<br />

#line 100 "aaaaa.c"<br />

printf("%s dosyasının %d. satırı\n", __FILE__, __LINE__);<br />

}<br />

return 0;<br />

Bir Başlık Dosyasının Birden Fazla Kez Kaynak Dosyaya Eklenmesi<br />

Projeler çoğunlukla farklı kaynak dosyalardan ve başlık dosyalarından oluşur. Hizmet alan<br />

kodlar (client codes) hizmet veren kodların (server codes) başlık dosyalarını eklerler.<br />

Başlık dosyasını eklemenin #include önişlemci komutuyla yapıldığını biliyorsunuz. Bir<br />

kodlama dosyasında iki ayrı başlık dosyasının eklendiğini düşünelim:<br />

/*** file1.c *****/<br />

#include "header1.h"<br />

#include "header2.h"<br />

Başlık dosyaları içinde başka başlık dosyalarının eklenmesine sık rastlanır. Örneğin<br />

header1 ve header2 isimli başlık dosyalarının her ikisinde de header3.h isimli bir başlık<br />

dosyasının eklendiğini düşünelim:<br />

/*** header1.h *****/<br />

#include "header3.h"<br />

/*** header2.h *****/<br />

#include "header3.h"<br />

Bu durumda file1.c isimli kaynak dosya içine header3.h isimli başlık dosyası iki kez<br />

eklenmiş olur. Bu duruma İngilizcede "multiple inclusion" denir. Peki bu durumun bir<br />

sakıncası var mıdır?<br />

Başlık dosyaları içinde bildirimler bulunur. Bir başlık dosyası iki kez eklenirse bu başlık<br />

dosyası içindeki bildirimler iki kez yapılmış olur. Bazı bildirimlerin özdeş olarak<br />

yinelenmesinin bir sakıncası yoktur. Örneğin bir işlev bildirimi daha önceki bir bildirimle<br />

çelişmemek kaydıyla yinelenebilir. Benzer durum extern bildirimleri ve typedef bildirimleri<br />

500

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

Saved successfully!

Ooh no, something went wrong!