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 />

assert makroları kaynak koddan silinir. Bütün assert makrolarını kaynak koddan silmek<br />

için programın kaynak kodun tepesine<br />

#define NDEBUG<br />

komutu yerleştirilmelidir.<br />

assert Makrosu Neden Kullanılır?<br />

assert makrosu programın geliştirilme aşamasında olası hataları yakalamak için<br />

programcı tarafından kaynak koda eklenen bir makrodur. Programcı kodunu yazarken bir<br />

böcek karşısında oluşabilecek durumlar için assert mokrolarını yerleştirir. Programın<br />

geliştirilme sürecinde denemeler sırasında assert mokrosu tarafından program<br />

sonlandırılırsa programcı olmaması gereken bir durumun olduğunu anlar ve bu durumun<br />

bir böcek nedeni ile oluştuğunu düşünür. Şüphesiz böcek tam olarak assert mokrosunun<br />

bulunduğu yerde olmayabilir. Başka yerde yapılan hatalar dolayısı ile böcek oluşmuş<br />

olabilir. Bu durum assert makrosu tarafından bir ipucu olarak ele geçirilir. assert<br />

makrosuna yakalanıldığında programcı kodunu akışa göre incelemeli ve böceğin nereden<br />

kaynaklandığını saptamaya çalışır. assert makrosu ile yapılan kontroller aslında düzgün<br />

çalışan bir program için gereksiz olan kontrollerdir. İşte programın assert makrolarının<br />

kontrol kodları yerleştirdiği (yani NDEBUG simgesel değişmezinin tamımlanmadığı)<br />

versiyonuna "hata arama sürümü" (debug versiyonu) denir. Hata arama sürümü assert<br />

makroları ile kaynak kodun şişmiş olduğu sürümdür. Programcı kodunda hiçbir böcek<br />

olmadığından emin ise programı teslim etmeden önce NDEBUG simgesel değişmezini<br />

tanımlayarak programı son kez derler. Buna programın "sürüm biçimi" (release version)<br />

denir. Büyük programlar debug versiyonunda oluşturulmalı, son aşamada release<br />

versiyonu elde edilmelidir.<br />

assert Makrosu Nerelerde Kullanılır?<br />

assert makroları programın ticari sürümlerinde ya da kodda kalması gereken durumlar<br />

için kullanılmamalıdır. Örneğin malloc ve fopen işlevlerinin geri dönüş değerleri programın<br />

hem debug sürümünde hem de release sürümünde kontrol edilmelidir. assert makroları<br />

şu durumlarda kullanılabilir:<br />

İşlev parametrelerinin olmaması gereken anormal değerleri alması durumu assert<br />

makrosu ile kontrol edilebilir. Özellikle işlev parametresi olan göstericilerin hemen ana<br />

bloğun girişinde NULL adresi olma durumu kontrol edilebilir, çünkü böceklerden dolayı<br />

göstericilerin NULL değerine düşmesi sık rastlanılan bir durumdur.<br />

Örneğin sıralama işlemi yapan bir işlevin tanımı içinde assert makrosu şöyle kullanılabilir:<br />

void sort_array(int *pArray, size_t size)<br />

{<br />

int i, k, temp;<br />

/*…*/<br />

assert(pArray != NULL);<br />

/*…*/<br />

}<br />

Program içinde programın düzenlenme sistemine göre asla olmaması gereken bir durum<br />

oluşuyorsa, bir böcekten şüphelenilmesi gerektiği durumlarda assert makrosu<br />

kullanılmalıdır.<br />

assert ifadeleri çok uzun tutulmamalıdır.<br />

Çünkü bu durumda assert ifadesinin başarısızlığı durumunda neden anlaşılamayabilir.<br />

Örneğin:<br />

assert(row1 < 25 && col1 < 80 && row2 < 25 && col2 < 80);<br />

yerine aşağıdaki kodun kullanılması daha anlamlıdır:<br />

504

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

Saved successfully!

Ooh no, something went wrong!