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

const belirleyicisinin kullanım amacı nedir? Kullanıldığı yere göre const belirleyicisi<br />

aşağıdaki faydaları sağlayabilir:<br />

1. Programın okunabilirliğini artırır. Bu yönüyle kodu okuyana yardımcı olur.<br />

Programı okuyanlar const anahtar sözcüğünü gördüklerinde nesnenin değerinin<br />

değiştirilmeyeceği bilgisini alırlar.<br />

2. Yanlışlıkla nesnenin değerinin değiştirilmesi engellenir. Bu yönüyle kodu yazana<br />

yardımcı olur. const bir nesnenin değeri atama yoluyla değiştirlmesi durumunda derleme<br />

zamanında hata oluşur. Böylece değeri değiştirilmemesi gereken bir nesnenin değerinin<br />

yanlışlıkla atama yoluyla değiştirilmesi de engellenmiş olur.<br />

3. const anahtar sözcüğü ile tanımlanan nesneler, derleyici tarafından salt okunan<br />

bellekte saklanabilirler. Derleyici const nesnenin değerinin değiştirilmeyeceğini<br />

bilmediğinden, bu nesnelerin kullanıldığı ifadeler için ek eniyileme(optimizasyon)<br />

işlemleri uygulayabilir. const anahtar sözcüğü bu yönüyle derleyiciye yardımcı olur.<br />

const Nesnelerle Simgesel Değişmezlerin Karşılaştırılması<br />

const nesneler değeri değişmeyecek değişmezler gibi kullanıldıklarına göre, bunların<br />

yerine çoğu zaman #define önişlemci komutuyla oluşturulmuş simgesel değişmezler de<br />

kullanılabilir.<br />

Ancak const nesneler ile simgesel değişmezler arasında bazı farklılıklar vardır. İkisi<br />

arasında tercih yapılması durumunda bu farklılıklar rol oynar:<br />

1. Simgesel değişmezler nesne değildir. Bu yüzden programın çalışma zamanında<br />

bellekte bir yer kaplamazlar. Nesne olmadıkları için bilinirlik alanları, ömürleri ve bağlantı<br />

özelliklerinden söz edilemez. Derleme aşamasına gelindiğinde derleyici simgesel<br />

değişmezlerin yerine, önişlemci tarafından yerleştirilen atomları görür.<br />

2. Derleyiciler const nesneler için daha iyi "debugging" desteği verirler.<br />

3. Derleyiciler derleme zamanında bir hata oluşması durumunda hatanın yerini işaretleme<br />

konusunda const nesneler için daha iyi destek verirler.<br />

4. Bir dizi const anahtar sözcüğü ile tanımlanabilir. Bu durumda dizinin köşeli ayraç işleci<br />

ile ulaşılan herhangi bir elemanına atama yapılamaz. Böyle bir durumu önişlemci #define<br />

komutuyla kolaylıkla gerçekleştirmek mümkün değildir:<br />

void foo<br />

{<br />

const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";<br />

alphabet[2] = 'X'; /* GEÇERSİZ*/<br />

}<br />

5. C'de const nesneler dış bağlantıya sahiptir. Bir const nesne, extern bildirimi yapılarak<br />

başka modüllerde kullanılabilir.<br />

6. C dilinde const nesneler değişmez ifadesi olarak kullanılamazlar. Aşağıdaki örneği<br />

inceleyin:<br />

#define SIZE 100<br />

int main()<br />

{<br />

const int size = 100;<br />

int legal_array[SIZE];<br />

int illegal_array[size]; /* GEÇERSİZ size değişmez ifadesi değil */<br />

/***/<br />

}<br />

352

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

Saved successfully!

Ooh no, something went wrong!