Standart C Programlama Dili


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; bu da sonuçta main adında bir fonksiyonu çağırır—bundan dolayı bu isimde bir tane fonksiyon bulunması gerekir—ve ona üç tane argüman geçirir. En sık kullanılanlar ilk iki argümandır, bunlar da main fonksiyonunun komut satırı argümanlarına ulaşmasını sağlar.

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;
}

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ı bir dosya oluştuğunu varsayalım. Aşağıdaki komut kullanılabilir:

C:\>DNM BIR IKI UC

Çıktı ise şöyle olacaktır:

Merhaba, benim ismim C:\DNM.EXE.
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. “char *” bir karakter dizisini tanımlar. Bu tipten olan bir değişken, 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 fonksiyonuna geçirilen komut satırı argümanları
ŞEKİL 4.1 main fonksiyonuna geçirilen komut satırı argümanları

main’in üçüncü parametresi (envp) argv’ye benzer. SET işletim sistemi komutuyla oluşturulan ortam karakter dizilerine göstergeler içeren bir dizidir. Bir program yazarak, bunları bastırmaya çalışın.