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

Örneğin yukarıda verilen örnekte mod2c modülünde bulunan y1 işlevi içinde bulunan x1<br />

işlevi çağrılıyor olsun:<br />

/****mod1.c *****/<br />

int a;<br />

float x1()<br />

{<br />

a = 100;<br />

}<br />

mod2.c<br />

extern int a;<br />

extern float x1(void);<br />

int y1()<br />

{<br />

float f;<br />

f = x1();<br />

a = 300;<br />

/***/<br />

}<br />

mod2.c modülünde x1 işlevi için yazılmış olan prototip ifadesini inceleyin:<br />

extern float x1(void);<br />

Bu örnekte x1 işlevi başka bir modülde tanımlı olduğu için bildiriminde extern anahtar<br />

sözcüğü kullanılıyor . Ancak extern belirteci eklenmeseydi derleyici zaten extern<br />

varsayacaktı.<br />

Bir global değişken hiçbir modülde tanımlanmadan, bütün modüllerde extern olarak<br />

bildirilirse, tüm modüller hatasız bir şekilde derlenebilir. Hata bağlama aşamasında,<br />

bağlayıcının extern olarak bildirilen nesneyi hiçbir modülde bulamaması biçiminde ortaya<br />

çıkar.<br />

extern belirleyicisinin tek bir modül söz konusu olduğunda "amaç dışı" bir kullanımı<br />

vardır. Aşağıdaki örnekte main işlevi içindeki global x değişkeni, tanımlamadan önce<br />

kullanıldığından hataya neden olur.<br />

int main()<br />

{<br />

/***/<br />

x = 100;<br />

/***/<br />

}<br />

int x; /* x global bir değişken ama tanımından daha önce kullanılmış */<br />

int func()<br />

{<br />

x = 200;<br />

/***/<br />

}<br />

Yukarıdaki kod derlendiğinde, main işlevinin içindeki x değişkeninin bildiriminin<br />

bulunamadığını ifade eden bir hata iletisiyle karşılaşılır. Bu durumda, eğer bir global<br />

değişken tanımlamadan kullanılıyorsa, hata oluşmaması için daha önce extern<br />

bildiriminde bulunulmalıdır.<br />

349

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

Saved successfully!

Ooh no, something went wrong!