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 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. 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ı

main fonksiyonuna geçirilen komut satırı argümanları

D N M \0 B I R \0 I K I \0 U C \0 4 argc argv argv[0] argv[3]
ŞEKİL 4.1 main fonksiyonuna geçirilen komut satırı argümanları

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.