4.2.3. main
Fonksiyonunun Parametreleri
main
de bir fonksiyondur, fakat ilk
bakışta sanki herhangi biri onu çağırıyor gibi gözükmemektedir. Bu
doğru değildir, çünkü birisi onu gerçekten çağırmaktadır.
İşletim sistemi, programı çalıştırmak için onu yükledikten sonra, bir
başlatma yordamı kontrolü eline alır ve sonuçta main
adında bir fonksiyonu çağırır—bundan dolayı, işletim sistemi ortamında
kullanılan C programlarında main
isminde bir tane
fonksiyon bulunması gerekir—ve ona üç tane argüman geçirir.
En sık kullanılanlar ilk iki argümandır. Bunlar sayesinde
main
fonksiyonu komut satırı argümanlarına
ulaşır.
main
’in şu şekilde tanımlanmış olduğunu varsayın:
#include <stdio.h> int main (int argc, char *argv[]) { int i; printf("Merhaba, benim ismim %s.\n", argv[0]); printf("Argumanlarim sunlar"); for (i=1; i<argc; i++) printf(", %s", argv[i]); printf(".\n"); return 0; } /* main */
Program derlenip bağlandıktan sonra işletilebilir bir dosya ortaya
çıkmış olacaktır. Bu dosyayı, isminin arkasına, isteğe bağlı olarak
verilen, birkaç argüman yazarak çalıştırırsınız. Bir Windows sisteminde
DNM.EXE
adlı işletilebilir bir dosya oluştuğunu varsayalım.
Aşağıdaki komut kullanılabilir:
>DNM BIR IKI UC
Çıktı ise şöyle olacaktır:
Merhaba, benim ismim DNM. Argumanlarim sunlar, BIR, IKI, UC.
main
’in ilk parametresi (argc
) bir sayıdır
ve programı çalıştırmak için verilen komut satırındaki toplam isim sayısına
eşittir. Yukarıdaki denemede 4 idi: Bir tanesi .EXE
dosya
adı için, 3 tanesi de onun argümanları için. main
’in ikinci
parametresi (argv
) char
’a
göstergelerden oluşan bir dizidir. Yine, main
onun için yer
ayırmadığından dolayı uzunluğu belirtilmemiştir.
bir karakter dizisini
tanımlar. Bu tipten olan bir değişken, char *
printf
’in kontrol
karakter dizisindeki %s
dönüşüm tanımlaması kullanılarak
basılabilir. argv
bir karakter dizileri dizisidir ve
argv[0]
, argv[1]
elemanları, karakter dizilerini
gösterir. Böylece yukarıdaki program argv
’nin elemanlarını
karakter dizileri olarak basar.
Şekil 4.1’deki şema başlatma yordamının main
için
hazırladığı belleğin durumunu gösterir.
main
’in üçüncü parametresi (envp
)
argv
’ye benzer. SET
Windows işletim sistemi
veya env
unix işletim sistemi
komutuyla da listelenebilen ve ortam karakter dizilerine göstergeler içeren bir
dizidir. Bir program yazarak, bunları bastırmaya çalışın.