c programlama


Operating systems ödevimi yaparken ihtiyacım olan ve bu güne kadar hiç kullanmadığım bir olayla karşılaştım C programlama dili üzerinde.

Eğer programımıza komut satırında çalıştırırken parametre girmemiz gerekirse bu işi nasıl yaparız?

Cevabı internette biraz araştırma yaptıktan sonra şu ana kadar parametresini hep void ile doldurduğum main fonksiyonuna parametre girmekle yapılacağını öğrendim. Şimdi bu iş nasıl gerçekleşiyor bakalım.

Örnek programımızın adı program.c olsun. program.c içerisinde main fonksiyon prototipimizi şu şekilde yazalım:

int main(int argc, char * argv[])

argc ve argv sıklıkla kullanılan değişken isimleridir. Tabi ikisi de değişken olduğu için isimlerini dilediğiniz şekilde değiştirebilirsiniz. Ardından programımızı gcc ile derleyelim:

xaph@linux$ gcc program.c

Son olarak ise programımızı çalıştırırken girmek istediğimiz değişkenleri girelim:

xaph@linux$ ./a.out degisken1 degisken2 degisken2

Bu şekilde çalıştırılan programımızda argc konsoldan girilmiş olan toplam input sayısını tutar. Bizim örneğimiz için bu değer 4tür. Main fonksiyonuna girmek istediğiniz değişkenler ise argv string arrayinde tutulmaktadır. argv[0] programımızın adını tutar. argv[1] den argv[3] e kadar olan dizi ise sırasıyla girdiğimiz degisken1, degisken2, degisken3 değerlerini tutar. Bu değişkenleri programınız içerisinde dilediğiniz gibi kullanabilirsiniz.

Konsoldan integer girişi:
Şu ana kadar girdiğimiz ve kullanmak istediğimiz değişkenler string veri türündeydi. Peki biz programımıza tamsayı girdisi yapmak istersek ne yapmalıyız?

Main fonksiyonunda kullandığımız prototip önceden tanımlı bir durumdadır. Dolayısıyla ikinci parametre olan char* veri türünde değişiklik yapamıyoruz. Bu da gireceğimiz her sayının karakter dizesi olarak tutulması anlamına geliyor. String veri türündeki bir tamsayıyı nümerik veri türlerine çevirmek için standart C kütüphanesinde atoi, atol, atof, strtol gibi fonksiyonlar bulunmakta. En çok kullanılanı olduğu için kısaca atoinin kullanıldığı bir örnek koda bakalım.

#include <stdio.h>
int main(int argc, char* argv[])
{
    int i;
    i=atoi(argv[1]);
    printf("%d", i);
}

Bu şekildeki bir programı derleyip parametre olarak integer değeri girdikten sonra, girdiğiniz değeri çıktı olarak basacaktır. Tabi çıktı sayının integer veri tipine çevrilmiş haliyle basılır.

Artık tek yapmanız gereken konsoldan aldığınız parametreleri istediğiniz hale getirip kullanmak. İyi kodlamalar.

Bir önceki yazımda C ile programlamaya başlangıç için basit bir “Hello World” uygulamasının nasıl yazılacağını ve çalıştırılacağını anlatmıştım. Şimdi ise yazdığımız “Hello World” programını detaylı bir şekilde inceleyelim.
Öncelikle kodumuzu tekrar yazalım:

#include <stdio.h>
int main()
{
     printf("Hello Woıld!");
     return 0;
}

Programımızı incelemeye 2. satırdaki main() fonksiyonumuz içerisinden başlamakta yarar var. Çünkü C kodları standart olarak main() fonksiyonundan itibaren çalışmaya başlarlar.
“int main()” yazarak iki şeyi belirtmiş oluyoruz. İlki, main() fonksiyonumuzun sisteme integer(tamsayı) cinsinden bir geri dönüş değeri göndereceği, ikincisi ise main() fonksiyonunun parametre almayacağıdır. Bu kavramlar şimdilik yabancı kavramlar olsa da hem kulak alışkanlığı olması açısından, hem de fonksiyon mantığına başlangıç olması açısından bilmenizde yarar var.
4. satırda “printf(“Hello Woıld!”);” ifademiz var. Printf, kendisine verilen bir yazıyı aynı şekilde ekrana bastırmaya yarıyor. Mesela tırnak içerisindeki yazıyı değiştirip “printf(“Merhaba Dünya!”);” yaptığımızda programızın çıktısı “Hello World!” değil, “Merhaba Dünya!” olacaktır.
5. satırda ise “return 0;” şeklinde bir ifade kullandık. main() fonksiyonumuzun sisteme geri dönüş değeri olarak bir tamsayı(int) değerini göndereceğini söylemiştik. Burada o geri gönderme işini yapıyoruz. Sisteme main() fonksiyonunun sorunsuz olarak çalıştığını bildiren “0″ geri dönüş değerini gönderiyoruz. Bu çok detaylı olarak bilmeniz gereken bir şey değil ancak standart olarak her C kodumuzda kullanmamız gereken bir satırdır.
Böylece kodumuzun sonuna gelmiş bulunmaktayız. Ancak ilk satırın ne işe yaradığını söylemedik. C programları kendi kod kütüphanelerini kullanırlar. “stdio.h” da bunlardan bir tanesidir. Standart input/output(standart girdi-çıktı) tanımının kısaltmasıdır. İçerisinde genel olarak C üzerindeki bir çok girdi ve çıktı işlemlerini yapan hazır fonksiyonları bulundurur. Bu fonksiyonların ne olduğunu bu sayfadan inceleyebilirsiniz.
Peki biz neden yazdık bu satırı? Biz ekrana çıktı vermek için “printf” fonksiyonunu kullandık ve bu fonksiyon da “stdio.h” dosyasının içerisinde tanımlanmaktadır. #include diyerek bu dosya içerisinde tanımlanmış bütün fonksiyonları kullanabileceğimiz hale getiririz.
Temel olarak programımızda olan şeyler bunlar. Bir de C programlama için genel olan şeyler var gelin bir de bunlara bakalım:

- C kodlarında her satırın sonunda “;” bulunur. Eğer “;” kullanmazsanız hata alırsınız.

- C kodları boşluk ayrımı yapmaz(tabi kullandığınız komut isimlerini ayırmadığınız sürece). Örnek olarak,

printf("yazi");

yazmak ile

printf       (     "yazi"      )                ;

yazmanız arasında bir fark yoktur. Ancak

prin tf("yazi");

yazarsanız hata alırsınız.
- C’de ekrana bir şeyler bastırırken yazıyı bölmeniz ekrana basımı sırasında herhangi bir şey değiştirmez. Yani

printf("Hello World!);

yazmak ile

printf("Hello ");
printf("World!");

yazmanız arasında hiçbir fark yoktur. İkisi de

Hello World!

çıktısını verecektir. Yazı içerisinde yeni bir satıra geçmek için “\n” kullanabilirsiniz.

printf("Hello \nWorld!");

Kodunun çıktısı

Hello
World!

şeklinde olacaktır.

- Boş bırakmak ile void yazmak arasında fark yoktur. Void’in kullanılma sebebi boşluğun unutulmadığını bilinçli olarak yapıldığını belirtmektir. (int main() yerine int main(void) ile karşılaşabilirsiniz. Bilginiz olsun)

İyi kodlamalar.

Linux üzerinde çalışıyorsanız ve C programlaya yeni başladıysanız, başlangıçta C kodlarını yazarken ve derlerken zorluk çekebilirsiniz.
Bunu halletmek için her şeyden önce elinizde C kodlarınızı yazacağınız bir text editorunuz bulunmalıdır. Seçeceğiniz text editörü konsol üzerinde çalışan vi, nano gibi editörler ya da görsel olarak çalışabileceğiniz gedit, kate, emacs gibi editörler olabilir. Hangisini kullanacağınıza karar vermek tamamen size kalmış. Herhangi bir text editöründe kodlarınızı yazdıktan sonra istediğiniz herhangi bir yere kaydedebilirsiniz. Kayıt işleminde dikkat etmeniz gereken nokta C kodlarınızı .c uzantılı olarak kaydetmenizdir.
Kodumuzu ornek.c adıyla /home/kullanıcı_adı klasörünüze kaydettiğimizi düşünelim ve örnek olarak bir C programını çalıştıralım. İlk yapmamız gereken bir konsol açıp kodumuzun bulunduğu dizine geçmek olmalı. Bunu yapmak için

$ cd /home/kullanıcı_adı

yazmamız yeterli olacaktır.
Eğer ki C kodumuzun olduğu klasörde olup olmadığımız hakkında bir şüphemiz varsa bunu

$ ls

komutunu kullanarak kontrol edebiliriz. “ls” komutu bulunduğumuz klasördeki dosyaların isimlerini konsola yazar.
Kodumuzun bulunduğu klasöre geçtikten sonra gcc ile kodumuzu derleyebiliriz. gcc’nin açılımı “gnu c compiler” olmakla linux dağıtımlarında kullanılan standart C derleyicisidir. gcc kullanarak kodumuzu derlemek için yine konsol üzerinde

$ gcc ornek.c

yazmamız yeterli olacaktır. Bu işlem sonunda kodumuz derlenir ve eğer varsa kod üzerindeki hatalar konsola yazılır. Eğer ki sorunsuz bir derleme yaptıysanız kodunuzun bulunduğu dizinde “a.out” adında bir dosya oluştuğunu görmelisiniz. Bu c kodunuzun derlenmiş, çalıştırılabilir(binary) halidir.
Derlenmiş C kodumuzu çalıştırmak için ise konsola

$ ./a.out

yazmamız yeterli olacaktır. Böylece C kodumuzun çıktısını konsol üzerinde görebiliriz.

a.out çıktısından farklı bir çıktı adıyla kod derlemek
Derleme işlemi yaparken birbirinden ayrı birkaç tane kod derlememiz ve hepsini ayrı ayrı kullanmamız gerekebilir. Eğer ki bütün kodlarımız a.out olarak derlenirse her çalıştırma işlemi için kodlarımızı yeniden derlememiz gerekir. Bunu engellemek için gcc’ye -o parametresini girmemiz ve kodumuzun derlenmiş halini başka bir isimde kaydetmemiz gerekmektedir. Örnek olarak ornek.c kodumuzu derleyip ornek adında kaydetmek için

$ gcc ornek.c - ornek

yazmamız yeterli olacaktır. Burada kullanacağımız -o parametresi gcc’ye kodumuzun çıktısı için farklı bir isim seçmek istediğimizi, ornek ise çıktımızın hangi adı alacağını anlatır. Kodumuzu farklı bir isimle derledikten sonra ise dikkat etmemiz gereken şey artık a.out değil de yani dosya adımızı çalıştırmamızdır. Yani son derlememiz için konsola

$ ./ornek

kodunu girmeliyiz. Böylece ornek.c dosyamızın derlenmiş hali olan ornek dosyasını çalıştırmış oluruz.

Derleyici Nedir?

Herhangi bir dilde programlamaya başlamaya karar veren birisinin ilk karşılaştığı problemlerden birisi oluşturacağı program kodlarını nereye yazması gerektiğidir. C de başlangıç dillerinden birisi olarak gösterildiğine göre C programlama dilinde program yazmak isteyenlerin bir kısmını yeni başlayanlar kategorisine alabiliriz. Bu yüzden sizlere oncelikle derleyici(compiler) nedir ve kullanımı nasıldır bunu anlatmak istedim.

Bir çogunuzun bildiği/duydugu üzere bilgisayarlar sadece 0 ve 1′leri kullanmaktadırlar. Bilgisayarın kullandığı bu 0 ve 1′lerden oluşan dile makine dili adı verilir. Makine diline bilgisayarın anadili diyebiliriz. Ancak makine dili bizim için öğrenmesi ve kullanaması oldukça zor bir dildir. Ayrıca kullanımı da oldukça uzundur Mesela makine dilinde bir A harfi tanımlamak istediğimizde 01000001 yazmak zorundayız. Programlama dillerive derleyiciler işte tam bu noktada devreye girer. Biz kullandığımız dilin kurallarına göre bir A harfi yazdığımızda kullandığımız derleyici onu makine diline yani 01000001 haline çevirir. Yani derleyicilir bizim bilgisayar ile aramızdaki tercümanlardır diyebiliriz. C için kullanabileceğiniz bir derleyiciyi verdiğim linkten ulaşabilirsiniz.

Dev C/C++ İndir

Dev C/C++’ın kurulum aşamasının herhangi bir Windows programından farkı yok ancak ilk çalıştırmada sizden bir özelliğinin kurulumu hakkında onay ister. Kurup kurmamak tamamen size kalmış bir şey. Ancak kurarsanız bilgisayarınızdan normalden daha fazla bir şekilde ram kullanacaktır.

İlk C programımızı Yazalım ve Çalıştıralım:

Derleyicimizi kurduktan sonra C’ye başlangıç için bir program yazabiliriz. Öncelikle birçok programlama kitabında da ilk olarak yapıldığı gibi “Hello World” programı yazalım. Hello World programı çalıştırıldığı zaman ekrana “Hello World yazdıran ve ardından sona eren bir programdır. Henğz derleyicinin nasıl çalıştığını bilmediğiniz için bu örnekte derleme işlemini adım adım yapacağız.

1- Öncelikle kod yazacağımız belgeyi oluşturmakla işe başlayalım. Dev-C’de File menüsünden New->Source File adımlarını izlerseniz boş bir C belgesi oluşturmuş olursunuz.

2- Dilerseniz kodumuzu yazmadan önce belgemizi adlandıralım. Bunun için yine File menüsünden Save as seçeneğine tıklamalısınız. Ya da klavyeden Ctrl+F12 kısayolunu da kullanabilirsiniz. Açılan pencerede Dosya adı olarak “Untitled Document” yazan yere ilk programımızı adlandırmak için HelloWorld.c (C kodları .c uzantısını kullanırlar) yazabilirsiniz. Boylece oluşturduğumuz belgeyi adlandırmış olduk.

3- Şimdi elimizde HelloWorld.c olarak adlandırdığımız boş bir C belgesi var. Artık programımızı yazabiliriz:


//Hello World programı
#include

int main()
{

printf(“Hello World!!\n”);
return 0;

}

4- Kodumuzu yazdıktan sonra execute menüsünden compile seçeneğini seçersek ve kodumuzda hata yoksa derleyicimiz kodumuzu çalıştırılabilir bir hale getirir. Eğer kodda hata çıkarsa derleyicimiz size “1 Warning 3 Error” gibi bir şekilde hata verecek ve hataların hangi satırda meydana geldiğini gösterecektir.

5- Kodumuzu duzgun bir şekilde derlediğimizi varsayarsak yine execute menüsünden run diyerek programımızı çalıştırabiliriz. Ancak programımız sadece ekrana yazı yazıp kapanacağı için siz ekranda bir şey göremeyeceksiniz. kodumuzu kaydettigimiz yerde .exe uzantılı yeni bir dosya olduğunu göreceksiniz. HelloWorld.exe adında olan bu uygulama kodumuzun derlenmiş ve çalıştırılabilir halidir. Programımızın çıktısını görmek için programımızı “komut istemi”nden çalıştırmamız gerekmektedir. Bunun için Başlat menüsünden Çalıştır seçildikten sonra cmd yazıp çalıştırmalı, ardından programımızı(.exe uzantılı halini) sürükleyip komut istemi içine bırakarak ya da adresini yazarak(C:Documents and Settings/kullanıcıAdı/Belgelerim/HelloWorld.exe gibi) enter tuşuna basmalıyız. Böylece kodumuzun verdiği çıktıyı tam olarak görebiliriz.

Bu belgemizde ekrana çıktı veren basit bir program yazdık. Alıştırma olarak printf içerisindeki yazıyı(tırnak işaretlerine dokunmadan) değiştirerek birkaç derleme daha yapabilirsiniz.(printf içerisindeki \n ifadesi yeni bir satıra atlamaya yarar) Bir sonraki belgemizde ise yazdığımız programda hangi kodun ne iş yaptığını detaylı bir şekilde anlatacağım.

İyi kodlamalar:)