Amiga Dünyası sayı 12, sayfa 34

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 34

Yukarıdaki örnekte 2 sayısının 0-10 arası üst kuvvetini alan bir fonksiyonun kullanımını görüyorsunuz. 2 sayısının istenilen değerdeki üst kuvveti alındıktan sonra, return komutuyla fonksiyondan bir kodla dönülür. Burada dikkat edilmesi gereken, fonksiyonun istediği parametreleri doğru vermektir. Aksi takdirde istenmeyen bir kodla karşılaşabiliriz.

Örnekte de olduğu gibi fonksiyon içerisinde parametreler bulunabilir. Fonksiyonu çağırırken kullandığımız değişkenlerle, fonksiyon içerisindeki değişkenler arasında adres olarak bir bağ yoktur. Yani bu parametrelerin yalnızca değeri alınarak işleme sokulur, adresler eşitlenmez.

Şimdi de fonksiyonların birbirleri ile iletişiminde kullanılan extern sıfatını öğrenelim.

Extern değişkenler, global değişkenlerdir. Herhangi bir değişkenin başına konularak, o değişkenin global olduğu belirtilir.

int p;

main() {

int k,l; …….

func() {

extern int p; ….. }

Yukarıdaki örnekten de anlaşılacağı gibi, p global bir değişken olarak tanımlanmıştır. Fakat burada farklı bir kullanım mevcuttur. func() fonksiyonunun içerisinde p değişkeni extern olarak belirtilmiştir. Yani burada func() fonksiyonu aynı source listesi içinde olmasa bile, p değişkenini global olarak diğer source programına bağlayacaktır. Aslında buradaki kullanım modüler bir çalışmada daha çok kullanılır. Modüler programlarda önce ana program compile edildikten sonra obje haline yani linke hazır hale getirilir. Daha sonra diğer program parçasıyla link edilirken, birinci program modülünün global değişkenlerini kullanmak isteyen ikinci program modülü, kullanacağı bu global değişkenleri extern olarak tanımlar. Yani artık ikinci program modülü de birinci program modülünün global değişkenlerini kullanabilecektir.

C dilinde fonksiyonlar da external olarak tanımlanmaktadır. Bu nedenle C dili, bir fonksiyon içerisinde yeni bir fonksiyonun tanımlanmasına izin vermez.

C dilinde kullanılan diğer bir değişken tipi de, register (yazmaç) değişkenlerdir. Bu değişkenler, herhangi bir bellek kullanmaz. Yani direkt olarak makinenizin mikroişlemcisinin register'larını kullanır. Bu da programınızın kod kısmının kısalmasını ve hızlanmasını sağlar. Register değişkenler, global olarak kullanılmazlar.

Bir fonksiyon içerisinde birkaç tane değişken register olarak yakalanabilir. Aslında bu mikroişlemcinin kullandığı register sayısına bağlıdır. Register değişkenler int, char ya da pointer olarak tanımlanırlar.

f(c, n) register char c; {

register int i; …

} C dilinde global diziler tanımlanırken, başlangıçta herhangi bir eleman atılabilir (initializing).

int nwhite=0; int nother=0; int ndigit[10]={0,0,0,0,0,0,0,0,0,0 }; main() { … }

Buradaki örnekte ndigit[] dizisi tanımlanırken bütün elemanları otomatik olarak sıfırlanmaktadır. Dikkatinizi çektiyse bunu yaparken süslü parantezler kullandık. Çünkü burada bir sıfırlama fonksiyonu mevcut.

Şimdi son olarak C dilindeki önişlem komutlarını görelim. Bunların başlıcaları #include ve #define komutlarıdır. Bu komutlar aslında programımızı daha çok compiler'a hazırlar. #include "isim" Bu komut "isim" adındaki C listesine (source) geçmemizi gösterir. Compiler programı ilk olarak bu source listesini compile etmeye başlar. Bu kısımda daha çok tanımlamalar ve fonksiyonlar mevcuttur. #define YES 1

#define komutu, C dilinde sabit değişkenleri tanımlamada kullanılır. Buradaki YES sabit değişkeni, program içerisinde herhangi bir fonksiyonda kullanılabilir. Fakat burada değişkenin sabit olduğunu unutmamak gerekir.

#define komutu ile sabit değişkenlere farklı tanımlamalar da yapabiliriz; #define then #define begin { #define end };

if(i>0) then begin a=1; b=2; end ya da,

#define square(x) x*x şeklinde kullanılabilir. Burada square(5) yazdığımızda, 5 sayısı işleme sokulur. Yani x*x, 5*5 gibi değerlendirilir. #define komutu ile buna benzer birçok fonksiyon da tanımlanabilir.

Daha önce yaptığımız print alt programını şimdi #define komutundan yararlanarak yapalım, _______ ___

#define printi(x) printf("%c\n",x); #define printfl(x) printf("%f\n",x); #define printc(x) printf("%c\n",x);

mainO {

int i; float f; char c;

printi(i); printfl(f); printc(c); }

Örnekten de anlaşılacağı gibi, #define ile tüm print fonksiyonlarını belirtebiliriz.

Bu ayki konularımız biraz önemli. Çünkü fonksiyonlar, C dilinin temelini oluşturmaktadır. Fakat bu konuları da atlattıktan sonra, artık siz de daha rahat C diline hakim olabilirsiniz.

Şimdilik bu kadar. Gelecek ay Dizi ve İşaret (array, pointer) değişkenlerini öğreneceğiz. Hoşçakalın.

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