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

extern int x;<br />

int main()<br />

{<br />

/*…*/<br />

x = 100;<br />

/*…*/<br />

}<br />

int x;<br />

int func()<br />

{<br />

x = 200;<br />

/***/<br />

}<br />

extern bildirimini bu şekilde kullanmak yerine, global değişkeni programın en başında<br />

tanımlamak daha iyi bir tekniktir.<br />

static Anahtar Sözcüğünün Global Değişkenler İle Kullanılması<br />

static belirleyicisi global bir değişken ile birlikte kullanılırsa, bu değişkeni iç bağlantıya<br />

sahip yapar. Yani static anahtar sözcüğüyle tanımlanmış bir global değişken iç bağlantıya<br />

sahiptir. Böyle bir değişken extern bildirimiyle projeyi oluşturan diğer modüllerde<br />

kullanılmaz, yalnızca kendi modülünde kullanılabilir.<br />

Global değişkenler için static tanımlamasının yalnızca bağlantı üzerinde etkili olduğuna,<br />

ömür üzerinde etkili olmadığına dikkat ediniz.<br />

Bir de şu soru üzerinde düşünelim? Neden iç bağlantıya sahip bir global değişken<br />

kullanmak isteyelim? Bir global değişkeni kendi modülüyle sınırlamak ne gibi faydalar<br />

sağlayabilir?<br />

İsim Kirlenmesi<br />

Bir projeyi oluşturan dosyalar içinde dış bağlantıya sahip iki varlığın ismi aynı olamaz.<br />

Eğer iki global varlık aynı ismi paylaşıyorsa bağlama aşamasında hata oluşur.<br />

Bu da özellikle büyük projeler söz konusu olduğunda tehlikeli bir durumdur. Zira büyük<br />

projelerin çoğunda hem çok sayıda programcı kod yazar, hem de başka firmalar<br />

tarafından yazılmış dosyalar da projede kullanılır. Bu durumda farklı kaynak dosyalar<br />

global varlıklara aynı isimler verilemez. Aynı isimlerin seçilmesi durumunda bağlama<br />

zamanında hata oluşur.<br />

Başka Modüller Tarafından Değiştirilmesi İstenmeyen Global<br />

Değişkenler<br />

Bir global değişken yalnızca bir modülü ilgilendiriyorsa, bu modülün hizmet verdiği<br />

modülleri ilgilendirmiyorsa, programın çalışma zamanında diğer modüller tarafından<br />

yanlışlıkla değiştirilebilir. Başka modüldeki global değişkenlerle isim çakışmasına yol<br />

açabilir yani isim kirlenmesine neden olabilir. Doğal olan böyle bir global değişkenin iç<br />

bağlantıya sahip olmasıdır. Böyle global değişkenler static anahtar sözcüğü ile<br />

tanımlanmalıdır.<br />

Modüllerin Oluşturulması<br />

Modül dışarıya bazı hizmetler verecek kodların oluşturduğu birimdir. C dilinde geleneksel<br />

olarak bir modüle ilişkin iki ayrı dosya oluşturulur. Bu dosyalardan biri modülün başlık<br />

dosyasıdır. Bir başlık dosyası bir modülün arayüzüdür (interface). Bir modülün arayüzü, o<br />

modülü kullanacak dosyaların derlenmesi sırasında, derleyicinin bilmesi gereken bilgileri<br />

sağlayan bildirimleri içerir. Modüller dışarıyla olan ilişkilerini arayüzleri ile kurar. Bir<br />

modüle ilişkin dışarıyı ilgilendiren bildirimler geleneksel olarak uzantısı ".h" olarak<br />

350

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

Saved successfully!

Ooh no, something went wrong!