 
   Ŀ
                                   ķ                              ͻ
                                    Ŀ                                
                                     Ľ                               
                                     ķ                               
                                                                    
                                   Ľ                               
                                 Yaz dizisi                             
   I 
                                                        Levent Yava      
      ͼ


                                    MERHABA

           Yaz dizimizde, gnmzn popler dili C'yi, elimizden geldiince
   bilgilerimiz dahilinde tantmaya alacaz. Hedefimiz, en az bir dil
   bilen programclardr. Dizi boyunca vereceimiz rneklerin, anlalmasn
   kolaylatrmak asndan sk sk dier dillerdeki uyarlamalarn da
   vereceiz. Bildiiniz gibi Programlama Sanat (PS) yllardan beri bir ok
   deerli programcnn rnne ev sahiplii etti. Yazmz sresince PS'de
   yer alm, konumuz ile ilgili rneklerden, yazlardan yararlanacaz.
   Bu dizinin konserve olarak hazrlanmadn hatrlatrm. Bu nedenle
   anlayamadnz konular rahatlkla yazarak dizimiz ierisinde zm
   bulacamz bilmenizi isterim. Sz fazla uzatmadan Sayn Ferhat
   Bykkkten, "C nedir, neden C tercih edilmelidir ?" sorusuna verdii
   cevap ile C renmeye balayalm.



    ķ
Ĵ Neden C tercih edilmelidir ? 
    ͼ

   ķ
    Ŀ  genel amal bir programlama dilidir. C ilk olarak Dennis Ritchie
     Ľ tarafndan UNIX iletim sistemi altnda DEC PDP-11 bilgisayarnda
     ķ gelitirilmitir. BCPL dili tarafndan etkilenen ve Ken Thompson
      tarafndan 1970 ylnda gelitirilen B dili C dilinin esinlendii
   Ľ temeli temsil etmektedir. UNIX iletim sistemi, C derleyicisi ve
   tm UNIX yazlmlar C'de hazrlanmtr. C dili UNIX iletim sistemini
   artrd halde dil UNIX iletim sistemine baml deildir. Artk
   gnmzde, tm modern iletim sistemlerinde C derleyicileri bulunmaktadr.
   Bu adan C ile hazrlanan bir yazlmn  bir ok iletim sistemi altnda
   hi deiiklik yaplmadan almas byk bir avantaj salamaktadr. C,
   "dk dzeyli" bir dil olarak kabul edilir. nk ilemler bilgisayarn
   alma mantna ok yakn olup, yksek dzeyli dillerdeki tanmsal
   komutlara sahip deildir. Bundan dolay C dili tm bilgisayarlarda ortak
   olan karakter, say ve adres yaplar zerinde almaktadr.Karakter
   dizileri, listeler, kmeler gibi objelerle ilgili ilemler
   bulunmamaktadr. Karakter dizilerinin karlatrlmas, birbirine
   aktarlmas gibi ilemlerin  dil ierisinde bulunmamas ilk anda bir
   zayflk olarak kabul edilebilir (rnein Pascal dilindeki X <>"Ahmet"
   gibi bir karlatrma yaplamyor). Ancak btn bu ilemler, fonksiyon
   ktphanelerinde bulunan fonksiyonlar tarafndan gerekletirilmektedir.
   (strcmp(x,"Ahmet") ). C diline zg olan bu yap son derece byk bir
   kolaylk salamaktadr. nk dil ok az sayda komuttan olumakta ve
   dosya, bellek ve terminal giri-k ilemlerinin hepsi program
   ktphanesinde bulunmaktadr.  C dilinde kk ve byk harf ayrm
   vardr. Yani, yaplan tanmlar eer  kk harfle yaplmsa, byk harf
   kullanlmamal (veya tam tersi). Pascal gibi dillerde, gerek dosya
   ilemleri gerek dier fonksiyonlar, dil ierisinde dorudan bulunmaktadr.
   rnek olarak "writeln" komutu Pascal dili ierisinde standart olarak
   tanmldr. Bunun dezavantaj, rnek olarak  zaman/tarih gibi yaplar
   zerinde ilem yapan fonksiyonlarn isimlerinin belirli bir pascal
   derleyicisine bal olarak kalmasdr. Bu, dilin  yapsn bozmaktadr.
   rnek olarak Borland tarafndan retilen Turbo Pascal derleyicisi, zamanla
   dil ierisine yzlerce ek komut katmtr. Oysa C dili sonderece saf ve
   standart bir tabana dayanmaktadr. C dili ana komutlarna hi bir ek
   yaplmamakta ancak C dilinin kulland fonksiyon ktphaneleri bunu
   iermektedir. Bu adan bir C program yazarken dosyalarla ilem yapmak
   iin standart fonksiyon arma yaps kullanlmakta ve fonksiyon
   ktphanesinde bulunan fonksiyona zg parametreler kullanlmaktadr.
   C dilinin bu zellikleri sayesinde bir donanmdan dierine aktarlan
   UNIX iletim sisteminin C yordamlar %95 gibi ok byk bir miktarda
   uyumluluk gstermektedir. C dili temel veri objeleri olarak kabul edilen
   karakter, eitli uzunluktaki tamsaylar ve ondalklardan ve ilem akn
   dzenleyen komut gruplamas, karar mekanizmas (if komutu), dng
   ilemleri(while,for,do), oklu seim mekanizmas (switch) gibi iyi bir
   yapsal dilde bulunmas gereken paralardan olumaktadr. C dili "dk
   dzeyli dil" olarak kabul edildii halde, nmerik, metin ileme, veri
   tabanlar ve daha birok alanda en nl yazlmlarn hazrlanmasnda
   kullanlmtr. C dili yapsal adan incelendiinde, merkezi ilem
   nitelerinde bulunan INC(arttrma) gibi komutlarn dile ++' gibi
   operatrler olarak yansd grlr. &&,|,^^,--,{ gibi iaretlerin dil
   ierisinde kullanmndan dolay, ilk bakta C programlar karmak eski
   yazlara benzeyebilir. Ancak bu iaretlerin, dili renmeye balaynca
   program yazmnda byk hz kazandrd grlebilir. nk Pascal gibi
   daha yksek dzeyli dillerde begin, end, not, or gibi komutlara karn C
   dili bu simgeleri kullanmaktadr.  nsanlarn C dilinden rkmelerinin bir
   sebebide bu olsa gerek. Oysa ok kk bir saydaki bu sembollere alnca
   programcnn ii son derece kolaylamaktadr. Dnyadaki balca
   niversiteleri incelediimiz zaman, genel olarak ilk programlamaya giri
   eitiminde Pascal dilinin kullanldn gryoruz. Bunun sebebi, daha
   yksek dzeyli bir dil olmas ve okumasnn daha kolay olmasdr. Fakat
   yazlm piyasas ve profesyonel programclar dnyasna girildii zaman,
   byk oranda bir C hakimiyeti gzmze arpyor. Bunun temel sebeplerinden
   biri, UNIX iletim sisteminin niversitelerdeki aratrma projelerinde
   youn olarak kullanlmas ve youn bir eitim alan rencilerin mezun
   olduktan sonra altklar yerlerde bu dilin bir standart yazlm retme
   arac olarak kullanmalardr. "Neden C ?" sorusunun dier cevaplar;

      1. C ufak bir dildir ve ufak bir dil programlama iin idealdir.
      2. C'de Pascal'dan daha az yapsal komut var(reserved word, keyword).
         Fakat buna ramen, tartmaya ak olmakla birlikte, daha gl
         bir dil.
      3. C'nin gc, doru kontrol mekanizmalar, veri tiplerinin seimi ve
         bunlarn doru biimde kullanld durumlarda snrsz bir kullanm
         olana salamasndan geliyor. Snrsz zellikle veri tiplerinin
         zerinde yaplan ilemlerdeki derleme kontrol anlamndadr.
         Bu konuda C dilinin derleyicileri son derece zayftr.
      4. C tanabilir bir dildir. Bu C programlarnn yok denecek kadar az
         deiikliklerle baka bir iletim sistemine aktarlp
         kullanlabilmesini salar.
      5. C dili basit ve gl. Dil, tasarlayanlarn kiisel tercihlerini
         yanstt bir alan olarak grlebilir. rnek olarak PDP-11
         bilgisayarndaki baz ilemlerin dili etkiledii grlr. Ancak bu
         bir dezavantaj deil tam tersi olumlu bir noktadr. nk dil
         programclarn kendileri iin ideal bir alma ortam
         yaratmalarndan doduu ve Bell laboratuarlarnda yaygn denenip
         beenilerek yaygnlk kazand iin genel ihtiyalara cevap
         verebilecek en iyi zmdr.
      6. C dili modlerdir. C tek bir eit modllemeye izin verir, o da
         harici fonksiyonlardr (Fonksiyonlar Pascal'daki gibi i ie
         tanmlamamaz). C snrl bir biimde modl gizlilii destei
         verir(static tanmlamalar).Bunlar ve standart fonksiyon
         ktphaneleri eklendii zaman son derece modler bir alma
         ortam salanm olur. Pascal dilinde, bu derece modlleme
         ancak Turbo Pascal ad verilen ve IBM PC ve uyumlularnda
         alan Pascal ivesinde rastlanr (TPU dosyalar). Ancak bu
         standart olmayp sadece PC ortamnda olduu iin Pascal
         programlarnn tanabilirliini yok etmektedir.



    ķ
Ĵ C programlarnn yaps 
    ͼ


      Bir C program en az bir main() fonksiyonundan oluur. Derlenerek EXE
   haline getirilmi bir C program ema ile gstermek gerekirse;

          Ŀ
              C runtime modl, programn almas iin 
              gerekli bellek ayarlamalar ve dier       
              ilemlerin yapld blm (RUNTIME)       
          Ĵ
              Call _main                                 
          Ĵ
              Dos'a dn hazrlklarnn yapld ve   
              program bitirecek blm                   
          
              programcnn yazd _main ve              
              dier fonksiyonlar..                       
          
              veriler.                                   
          

   C derleyicisi, derledii programda, public (genel) olarak tanmlanm
   bir main fonksiyonunun bulunmasn ister. Derleyici, program ilk olarak
   RUNTIME modln alacak ekilde oluturur. Bu modl programn salkl
   alabilmesi iin gerekli dzenlemeleri yaptktan sonra kullancnn
   yazd varsaylan _main fonksiyonuna geici dallanma (CALL) yapar.
   _main fonksiyonu sona erdiinde kontrol yine RUNTIME modlne geerek,
   dos'a dn iin gerekli dzenlemeler yaplr ve program sona erdirilir.

   Buna gre C derleyicisi ve hi bir C komutu kullanmadan, sadece C'nin
   RUNTIME modl ve LIBRARY'sini kullanarak bir program oluturmak
   mmkndr. Bunu, assembly dilinde bir MAIN fonksiyonu yazarak deneyelim.

    DENEME.ASMĿ
     .model   small                     
     .code                              
     public   _main                     
     _main    proc                      
              push  bp                  
              mov   bp,sp               
              call  _clrscr             
              mov   ah,2                
              mov   dl,7                
              int   21h                 
              pop   bp                  
              ret                       
     _main    endp                      
     extrn    _clrscr:near              
              end                       
    

    Assembly programmz TASM ile derleyip TLINK ile Turbo C'nin C0S.OBJ
    (model small RUNTIME) ve CS.LIB (model small C LIBRARY) birletirelim.

          Tlink c0s.obj+deneme.obj,deneme.exe,,cs.lib

    Grdnz gibi hi bir C komutu ve derleyicisi kullanmadan, C
    kaynaklarn kullanarak bir program elde ettik. Programda external
    olarak tanmlanan _clrscr fonksiyonu (bunun bir C komutu olmadn
    hatrlatrm) C ktphanesinde bulunan bir ekran temizleme fonksiyonudur. 


                              -Devam edecek-

