Komut Satırı Argümanlari

Herhangi bir programlama dilinde fonksiyonları öğrendiyseniz, fonksiyonların parametreli ve parametresiz tanımlanabileceğini görmüşsünüzdür. Parametresiz olan fonksiyonlar kendi blokları içerisinde tanımlanmış (ve global tanımlanan) değişkenler üzerinde işlem yapmaktadır. Bazen de fonksiyona dışardan bir değer gönderip ona göre işlem yapmasını bekleriz. Bu durumda ise fonksiyonumuzu parametre alacak şekilde tanımlarız.

C’yi ilk öğrendiğinizde main fonksiyonun tanımlaması genelde şu şekildedir.

int main(){
  // Kodlarımız
  return 0;
}

İlk başta sizde benim gibi bu iskeleti kullanarak içerisine kodlarınızı yazıp, programınızı çalıştırmış olabilirsiniz. Ya da main(int argc, int *argv[]) şeklinde bir tanımlama kullanmış olabilirsiniz. Main fonksiyonundaki parametlerin ne işe yaradığını anlamak biraz zaman alıyor. Özellikle komut satırından herhangi bir program çalıştırmadıysanız bunu anlamak biraz daha zorlaşabiliyor.

Durum şöyleki, biz yazdığımız program içerisinde fonksiyon çağırırken, bu fonksiyonlara argümanlar aktarıp üzerinde işlem yapıyoruz. Peki main’i kim çağırıyor? Ya da main bir fonksiyon mu ? :) Dili ilk öğrendiğinizde fonksiyon kavramını bilmiyorsanız, main’in bir fonksiyon yapısında, özelliğinde olduğunu farkedemeyebilirsiniz. Sonradan farkedersiniz ki main de bir fonksiyon olarak tanımlanıyor, parametresiz olabiliyor, parametreli olabiliyor ve bir tane geri dönüş değeri olabiliyor. (void olarak da tanımlanabiliyor, standardlara ve derleyiciye göre farklılık gösterebilir) Benim şu ana kadar yazdığım tüm programlar en baştaki yazdığım şekildeydi, parametre almayan bir main fonksiyonundan oluşuyordu. Ama gün geliyor verilen ödevler,programınızın mantığı parametreli şeklini kullanmanızı gerektirebiliyor. Özellikle dosyadan veri okuyorsanız, okuyacağınız dosyanın ismini parametre olarak almak güzel bir yöntem olabilir. Tabi komut satırını kullanmak zorunda olmanız dışında :)

Main fonksiyonu her C programının başladığı ilk noktadır. Bilgisayar bir C programını çalıştırdığında main fonksiyonundan çalıştırmaya başlar. Main de bir fonksiyon olduğundan programı çalıştıracağımız zaman dışardan parametre aktarması yapabilmemiz gerekiyor. Tıkla-çalıştır yöntemiyle parametre gönderimi yapılamıyor. Bu yüzden programını komut satırından çalıştırmamız gerekiyor.

#include <stdio.h>;

int main(int argc, char *argv[]) {
    if ( argc < 2 ) {
      printf("Komut satirindan parametre gelmedi!n");
    } else {
      int i;
      for (i=0; i>argc; i++ ) {
        printf("%d.Parametre : %sn", i+1, argv[i]);
      }
    }
    return 0;
}

Üsteki kod parçasını inceleyecek olursak, main fonksiyonun aldığı iki tane parametre var. Birincisi argc: programa komut satırından gönderilen parametrelerin sayısını tutar. argument count’ın kısaltmışı. İkincisi ise gelen parametrelerin değerlerini saklayan bellek kısımlarının başlangıç noktasını gösteren pointer dizisidir.Argument value’nun kısaltılmışıdır. Kod parçasını derledikten sonra,komut satırından programın çalıştırılabilir(executable) halinin olduğu dosya dizinine giriniz(cd komutu). Sonra programismi.exe <parametreler>(Windows) veya ./programismi <parametreler>(Linux) şeklinde çalıştırınız. Ya da programın bulunduğu dizini komut satırını yazınız. Eğer sadece program ismini yazıp çalıştırdığınızda if’in true kısmı çalışacaktır. Bu kontrolü programınızın dışardan parametre almasının şart olduğu durumlarda kullanabilirsiniz. Parametresiz çalıştırılıyorsa programı sonlandırabilirsiniz mesela.

Programın ilk parametresinin, programın ismi olduğuna dikkat ediniz. Parametre isimlerinin argc ve argc şeklinde olması zorunda değil tabiki. Başka isimler de kullanabilirsiniz. Alışılagelmiş bir şey ve açılımlarını bildiğiniz zaman kullanımları daha da kolaylaşıyor. Mantığını anladıktan sonra, normal C programı içerisinde kullandığımız fonksiyonlara gönderdiğimiz parametreler ve kullanımlarından bir farkı yok.

İyi çalışmalar.