Amiga Dünyası sayı 7, sayfa 48

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 48

Merhaba... Geçen ayki yazımın sonunda, bu ay external (Tk. dışsal) değişkenleri inceleyeceğimizi belirtmiştim. Şimdi, hazırsanız kaldığımız yerden devam edelim.

Önce altıncı sayının gözünüzün önünde olmasını sağlayın. Çünkü arada sırada bakmanız gerekecek.

Geçen ay birinci kutuda verilen programı incelerseniz, main fonksiyonundaki değişkenlerin (len, max, line vb.) sadece main'e özel veya onun içinde (İng. local) geçerli olduğunu fark edebilirsiniz. Başka hiçbir fonksiyon onlara direkt olarak ulaşamaz. Bu durum, diğer fonksiyonlar için de geçerlidir. Örneğin getline fonksiyonundaki i değişkeni ile copy fonksiyonundaki i, tamamen bağımsızdır ve birbirleriyle hiçbir ilişkileri yoktur. Her lokal değişken, içinde bulunduğu fonksiyonun çağrılması ile ortaya çıkar ve fonksiyondan çıkıldığında ortadan kaybolur. Dolayısıyla bu tür değişkenlere C dilinde otomatik değişkenler adı verilir.

Fonksiyonların çağrılıp bitişiyle otomatik değişkenler de ortaya çıkıp yok olduklarından, bu tür değişkenler fonksiyon her çağrıldığında yeniden eşlenmelidirler. Eğer bu değişkenler bir eşleme ile değere eşlenmezlerse, değerleri tahmin edilemeyen bir değer olabilir.

Otomatik değişkenlere bir alternatif olarak external (Tk. dışsal) olan değişkenler tanımlamak da olasıdır. Bu tür değişkenler, istenen her fonksiyon tarafından değiştirilebilir ve değerleri her zaman son işlemden sonraki halde kalır (Doğal olarak yeni bir işlem bu değeri değiştirebilir). External değişkenler, mutlaka tüm fonksiyonların dışında tanımlanmalıdır. Bu tanımlama işlemi sonunda, değişkenler için bir bellek alanı da ayrılır. Değişken, onu kullanmak isteyen her fonksiyonun içinde de tanımlanmalıdır. Tanımlama işlemi, değişkenin başına extern deklerasyonunun yazılması ile yapılır. External değişkenleri daha iyi anlamak için, 6. sayıdaki 2. kutudaki en uzun satır programını line, save ve max değişkenlerini external değişken olarak kullanıp yeniden yazalım. Programın listesini Kutu 1'de bulabilirsiniz.

main, getline ve copy fonksiyonlarındaki external değişkenler programın başındaki:

char line[MAXLINE]; char save[MAXLINE]; int max;

satırları ile tanımlamaktadır. Bu tanımlamalarda, değişkenin bir türü verilmek zorundadır. Farkettiyseniz, external değişken tanımlamaları aynen otomatik değişmutlaka değişkenin adını ve türünü bilmelidir. Bunu yapmanın bir yolu, değişken tanımlamasının başına extern yazarak onu fonksiyona tanıtmaktır ki, biraz önce de söylediğim gibi; bu işlem, extern ön eki hariç otomatik değişkenlerin tanımlanmasıyla aynıdır.

Bazı durumlarda (ki sizin yapacağınız birçok kısa program için bu geçerli) extern tanımlamaları yazılmayabilir. Hatırlayacağınız gibi, C dilinde bir program birçok parçadan oluşabilir ve bu parçalar ayrı ayrı compile edilip sonuçta birleştirilebilir. Eğer external değişken bir fonksiyonda kullanılmadan önce o program parçasında tanımlanmışsa, extern kelimesinin yazılmasına gerek yoktur. Dolayısıyla, program örneğimizdeki main, getline ve copy'deki extern tanımlamalarına aslında gerek yoktur. Eğer biz main'i ayrı, getline'ı ayrı, copy'yi ayrı compile etseydik, bu deklerasyonlar gerekli olacaktı. Tanımlayacağınız external değişkenleri, programın başında hiçbir fonksiyon onları kullanmadan tanımlamanız, programın anlaşılabilirliği açısından yararlı olacaktır.

Bu arada tanımlama (İng. declaration) ve eşleme (İng. definition) kelimelerinin arasındaki farkın anlaşılması oldukça önemli. Eşleme, bir değişken için bellekte bir yer ayrılmasına sebep olan işlem (a=3;); tanımlama ise, bir değişkenin sadece türünün tanımlanması yani onun için bellekte bir yer ayrılmaması (extern int a;) demektir.

Dikkat edileceği gibi, her değişkeni external yapmak sanki daha kolay gibi gözükmekte. Fakat aslında external değişkenlerin önemli dezavantajları var. Örneğin siz istemezseniz bile onlar hep oradadırlar. Bu programınızın kullanacağı belleği artırır. Ayrıca birbirinden bağımsız yapılabilecek fonksiyonlar external değişken kullanımı ile birbirine bağlanmakta, bu da fonksiyonların başka programlarda kullanılma şansını azaltmaktadır. Ayrıca uzun programlarda programın değiştirilmesi de daha zorlaşır. Böylece yazı dizimizin ilk bölümü olan C diline girişi bitirmiş olduk. Bu aşamada elinizden geldiği kadar çok alıştırma yapın (Aklınıza ne geliyorsa programlamaya çalışın). İkinci kutuda sizlere yardımcı olmak amacıyla birkaç örnek veriyorum. Başaramazsanız, dergiye yazın, cevaplandıralım.

Yazı dizimiz bundan sonra daha hızlı bir şekilde C'nin derinliklerine doğru hareket edecek. Gelecek sayıda buluşmak üzere.

Klavyeyle gezinmek için ← ve → tuşları.