C'ye Giriş

Pardus-Linux.org | Wiki sitesinden

Git ve: kullan, ara

Linux’ta C -1.Adım

Bilgisayar ilk yapıldığında makine dili denilen 1'ler ve 0'lar ile kodlanıyordu. Makine dilinde kodlama çok zor olduğundan programlama dili ve bunların derleyicileri ortaya çıktı. Programlama dillerinde siz o dile göre komutları yazarsınız derleyiciler (veya yorumlayıcılar) bunu makine diline çevirir. Böylece bilgisayar denilen komutlar anlar ve ona göre hareket eder. İlk olarak makine diline en yakın olan Assembly dili geliştirildi. Fakat bu dilde kodlamanın uzun sürmesi ve hataların anlaşılmasının zorluğu nedeniyle başka diller de geliştirildi. Temel olarak iki çeşit sınıflandırma vardır. Biri dil düzeyi diğeri taban çeşidi. Dil düzeyinde yüksek, orta ve düşük seviyeli dilleri vardır. Seviyenin düşmesi demek o programlama dilinin makine diline yakınlaşıp günlük konuşma kelimelerinden uzaklaşması demektir. Seviyenin yükselmesi de haliyle bunun tam tersidir. Taban çeşidi ise o dilin nesne tabanlı olup olmadığıyla alakalıdır. Nesne tabanlı olan diller bildiğimiz pencereler ile programlanabilir ama C veya Assembly gibi diller doğrudan o şekilde programlanamaz. Assembly dilinden sonra temel olarak C ve Fortran dilleri çıktı. Ondan sonra birbirlerinden türeyen diller ve ayrı olarak çıkan diller ile programlama dillerinin sayısı 50’yi aştı. C dilinin en önemli özelliği C++ ile (C’yi kapsayan gelişmiş bir dil) nesne tabanlı olarak yazılıp aynı zamanda makine dili kadar hızını günlük konuşmaya yakın kodlar ile kaybetmemesidir. Aynı zamanda anahtar kelime sayısı da azdır. Bu şu demektir. Örneğin X dilinde 30 tane anahtar sözcük var ve Y dilinde 10 tane var ise Y dili diğer özellikler eşit kabul edilirse daha iyidir. Şimdi C diline küçük bir giriş yapalım, yalnız herhangi bir dilde yazılım geliştirmek için algoritma ve akış çizelgesinin iyi derecede bilinmesi gerektiğini hatırlatalım. Pardus’ta ya da diğer GNU/Linux dağıtımlarında C dilinde yazılım geliştirmek için bazı yazılımlara ve kütüphanelere ihtiyaç duyabiliriz. Öncelikle yazdıklarımızı derlemek için kullanacağımız gcc adlı derleyicinin ve ncurses kütüphanesinin yüklü olduğundan emin olmamız gerekiyor. Yüklü değilse depolarımızdan yükleyebiliriz. [1] Derleyicimiz ve kütüphanemizi yüklediysek işe koyulabiliriz. Herhangi bir metin düzenleyicisi (örn. Kate, Kwrite, Gedit, Geany) ile komutlarımızı yazdıktan sonra dosyayı “.c” uzantılı olarak kaydedeceğiz. Ardından terminalimizi orada açıp şu komutla derleyeceğiz:

“gcc kaynakkodu.c –o kaynakkodu –lncurses … .” 

Peki bunlar ne demek oluyor?

Bu komuttaki “gcc”, bizim kullanacağımız derleyici yazılım, “kaynakkodu.c” ise bizim derlenek dosya, “-o” seçeneği derlenmiş dosyaya isim vermek istiyorsak kullanacağımız tercihe bağlı bir seçenek, “kaynakkodu” çıktı dosyasının adı anlamına geliyor. Geldik can alıcı noktaya: Bazı kütüphaneler kaynak kodunun içerisine yazıldıktan sonra derlenebildikten sonra “-l” kodundan sonra kütüphanenin kendine has çağrılışı ile çağrılır. Örn: ncurses.h -lncurses

Artık C diline adım atabiliriz. C’de bir kaynak dosyası şu şekilde oluşur:

Eklenen kütüphaneler. (include)

Açıklamalar. (/* */ notasyonu)

Fonksiyonlar (function)

Değişken tanımlamaları. (veri tipleri)

Ana fonksiyon (main)

İşlemler vb.

Biz bu yazıda genel olarak bunları inceleyeceğiz :

Açıklamalar (/* */ veya //) : Bir programcı bir kodu yazdıktan bir süre sonra nerede kaldığını niçin öyle yaptığını unutabilir. O yüzden açıklamalar adını verdiğim bölümü istediğimiz yere yazıp kullanabiliriz. /* */ arasına yazılanları derleyici okumaz ve atlar. Örneğin:
printf (“Talha”); talha;
yazsak ve eğer bir şekilde talha diye bir fonksiyon veya deyim belirlememişsek yazılım hata verir. Ama eğer:
printf (“Talha”);/* talha */
yazsak program hata vermez. /* */ gösterimini birkaç satır için de kullanabiliriz :
printf(“Talha”); /* talha
pardus kullanın. */
yukarıdaki örnekte “talha pardus kullanın” kısmı derleyici tarafından okunmayacaktır. Ayrıca // 'den sonra aynı satırda yazılanlar için de aynı durum söz konusudur. Örneğin :
printf (“Talha”); //Talha
Eklenen kütüphaneler (include): Bir kodu yazarken sinüs formülünü kullanacağız. Ama bunu nasıl yapacağız? Veya pi ile bir işimiz var. Olmadı programa bir metinde arama yaptıracağız. Veya bilgisayar tahminen bir sayı tutacak. Bunları nasıl kodlayacağız ? İşte o zaman tüm bu işlemlerin mantığını yazmak yerine devreye kütüphaneler giriyor.
#include <kütüphaneadı.h>
Olarak yazılan kütüphaneler ile bu işlevleri yerine getirebiliriz. Kütüphane adını yukarıda gösterildiği gibi “< >” işaratlerinin arasına almak yerine aşağıdaki gibi tırnak içine de alınabilir :
#include “stdio.h”
Fonksiyonlar (function): Genel olarak tüm iş adamlarının bir işte yaptığı ve klasik Çin felsefesi olan “Böl, parçala ve yut.” mantığı yazılım geliştirmede de geçerlidir. Biz uzun ve karmaşık olan programları kodlarken onları küçük parçalara ayırıyoruz ve gerektiğinde çağırıp kullanıyoruz böylece karmaşadan kurtuluyoruz.


Değişken Tanımlama : Bu bölümü daha sonra veri tiplerinde anlatacağız.

Ana Fonksiyon (main () ) : Ana fonksiyon yazılımımızın temelini oluşturur. Fonksiyonları ve bir takım deyimleri buradan çağırırız.
main()
{
……..
komutlar
…….
}
olarak yazdığımız kısım, yazılımımızda beyin kısmını görür.
Şimdi bu gördüklerimizle kısa bir yazılım yapalım. Metin düzenleyicimizi açıp aşağıdaki komutları yazıyoruz :
/* Biz Hello degil Merhaba deriz. */
#include “stdio.h”
#include “ncurses.h”
main()
{
clrscr();
printf(“Bak kardesim Biz Hello degil Merhaba deriz. \n”);
getch();return 0;
}

Bilmediğimiz hangi komutlar var? Bir yazalım bakalım :

clrscr()
printf()
getch()
return 0
\n
clrscr() fonksiyonu, komut satırındaki yazıları temizler. printf() fonksiyonu, bazı komutlar hariç tırnak arasına yazılanları çıktı olarak verir. getch() fonksiyonu, klavyeden bir komut girilene dek yazılımı bekletir. Bizim kullanma amacımız ise yazılımın işlemi bitirip hemen kapanmaması yani klavyeden bir komut girilene kadar beklemesi. return 0 ise bu yazılımın başka bir yazılıma veri göndermeyeceği anlamına gelir. \n ise bir alt satıra geç demektir. Bu ayki dersimizde C diline yüzeysel bir giriş yaptık. Tekrar hatırlatmakta fayda var, yazılım geliştirmek için akış çizelgesinin bilinmesi gerekir. Bu öğrendiklerimizi pekiştirmek için cevabını bir sonraki sayıda vereceğimiz aşağıdaki çıktıyı veren bir yazılım yapabilirsiniz :
-----------*--------
---------**-*-------
--------**----------
--------**----------
--------***---------
---------***-*------
----------***-------

[1] Eğer depoda ilgili yazılımları bulamazsanız GCC'yi http://gcc.gnu.org/, ncurses kütüphanesini http://ftp.gnu.org/pub/gnu/ncurses adreslerinden indirerek kaynak koddan kurulum yapmanız gerekebilir.

M.Talha İlhan mtalhailhan@gmail.com http://neyapacagiz.blogspot.com/



Bu yazı Pardus-Linux.org eDergi 5. Sayı'dan derlenmiştir. Dergiyi incelemek için www.pardus-edergi.org