You are on page 1of 526
‘00000 1 Ging a Genel Kavramiar. 31 Programiamanin Temel Kavramiani ve Gye Gig 47 Veri ve Nesne Titer... Pn Biidirim ve Tanimlama 7 Sabiter. 73 Fonksiyoniar. 93 Nesnelerin Faaliyet Aianlani ve Omirler 413 Operatorler..... 127 10 if Deyimi... vs Z “ 11 Fonksiyon Prototipieri 175 12 Tir Doniisimien 183, 13 Yer ve Tir Belirleyicier 197 14 Dangiler 2 415 Onislomei Kavrami ve Sembolk Sabiler 229 16 switch Deyimi ve Komul | Operatéra Z 17 Dizier, : 18 Géstercier. 19 Gésteriei Uygulamaian 20 Stringler. 21 Yakin, Uzak vo Dev Géstercile. 22 Uzak Gostericilere iliskin Uygulamalar.. 23 Dinamik Balok Yénetimi.. cs 24 Gdsterici Diziler eexvonaen Géstericileri Gasteren Géstericiler ve Fonsiyon Géstericileri 389 25 Yapllar. 407 26 Birkle. 431 27 Bit Alanian. 449 28 Tir Tanimlamalan ve Sayimlama Sabitler AST 29 Yap, Birlk ve Bit Alanlariyla ilgili Karmagik Tanimlamalar. AGT 30 Onisiemci Komutlan 473 31 Dosya fglemler 487 Page 1 ADAN 2’YE ILAVUZU G WIOD MY IOISISD PARAM ISFQuolxU.Gonn a Pusula 23 “Kim Korkar...” dizisi 15 A‘dan Z’ye C Kulavuan Kaan Aslan 1. basum, Mart 1997 2. busim, Ocak 1998 3. basim, Kase 1999 4, basum, Temmuz 2000 5. basim, Ocak 2001 6. basim, Ajustos 2001 7. busim, Ekim 2001 8, basim, Ocak 2002 Yayin yonetmeni: Mustafa Arslantunal: Kapak taganme Mustafa Arslantunal, Diizelti: Alper Zorlu Ikonlar: Ragip Incesagir Sayfa diizeni: Giilnur Ozkarabacak Baski: Acar Matbaast Tel: (0212) 422 18 00 Dagitim sorumlusu: Hiiseyin Ustiinel (0212-252 42 80) “Kim Korkar...” dizisi, Pusula Ltd, tatafindan yayinlanmaktader. Biitiin hakdart Pusula Ltd.’e aittir. Yayincimin yazill izni olmaksizin, kitabin tiimii veya bir pargast tekrar basilamaz, (Ticart amaglar igin kullanilmamak sattiyla, forokopi yoluyla gogalulabilir.) Pusula Yayincilik ve letigim Ltd, Biiyiikparmakkap1 Sok. No: 1/2 Beyoplu/Istanbul Tel.: 0212 252 42 80 (faks) 0212 293 15 44e-posta: pusula@pusula.com web site: www.pusula.com Pusula 23 “Kim Korkar..” dizisi 15 A’daw Z'ye C Kdavurn Kaan Aslan 1. basum, Mart 1997 2, basim, Ocak 1998 3. basim, Kasim 1999 4. basim, Temmuz 2000 5. basim, Ocak 2001 6. basim, Agustos 2001 7. basim, Ekim 2001 8. basim, Ocak 2002 Yaym yénermeni: Mustafa Arslantunalt Kapak tasarimi: Mustafa Arslantunals Diizelti: Alper Zorlu Ikonlar: Ragip Incesagir Sayfa diizeni: Gillnur Gzkurabacak Baska: Acar Marbaast Tel: (0212) 422 18 00 Dagitim sorumlusu: Hiiseyin Ustiinel (0212-252 42 80) “Kim Korkar...” dizisi, Pusula Ltd, tarafindan yayinlanmaktadir Biriin haklan Pusula Led.’e aitti. Yayincinin yazili izni olmaksizin, kitabin tiimé veya bir pargast tekrar basilamaz, (Ticari amaglar igin kullanimamak gartyyla, fotokopi yoluyla gofaltilabilit.) Pusula Yayincilsk ve letisim Ltd. Biyiikparmakkapi Sok. No: 1/2 Beyoglu/Istanbul ‘Vel.: 0212 252 42 80 (faks) 0212 293 15 44e-posta: pusula@pucula.com web site: www.pusula.com CISrgliol] 8 100 100 101 102 Lod 106 107 109 Ib 1B CISGrGQliolxU.Gonn YATRA ito Nidan Z'ye © Kilavuzu 8.2. Yerel Degiskenler {Local Variables) 8.3 Global Deitiskenler (Global Variables) 8.4 Parametre Degiskenleri (Formal Parameters) 8.5 Parametre Aktarm Kurali 8.6 Nesnelerin Omiirleri (Duration) 8.6. 1 Statik Gnu (Static duration) 8.6.2 Dinamik Omiirli Nesneler (Dynamic duration) Soramadiklaren 9 Operatiirler 9. 1 Operatir Nedir? 9. 2 Operatéinler Arasindaki Gncelile liskisi 9. 3 Operatérlerin Sinuflancietlmast 9. 4 Operatiilerin lslevlerine Gore Suniflandirimast 9.5 Operatérlerin Opesand Sayilanna Gore Sumflancinlmast 9. 6 Operatérlerin Konumlanoa Gore Siniflandiriimast 9.7 Aritmetile Qperatérler 9. 8 Siipheli Kedlar 9. 9 Lliskisel Operatérler 9. 10 Manuksal Operatorler 9, 10, 1 C’'de Mantiksal Dogeu ve Yanlg Degerler 9, 10, 2 Manuksal Operatérlerin Diger Operatédere Gore Oncelik Durumlan 9. LI Bit Operarérleri 9. 11.1 Bit Operatérlesinin Diger Operatérlere Gére Gneelik Durumlan 9.12 Oteleme Iglemleri 9. 13 Gosterici Operatérleri 3.14 Ozel Amagh Operatirler 9. 14.1 Atama (=) Operatirii 9, 14. 2 Iglemli Arama Operatéeleri 9, 14, 3 Virgil (,) Operatiieti 9,14. 4 Oncelik Operarérit 9, 15 Hadelerin Okenabilirligi Uzerine. Soramadiklarinz Nesneler id 7 120 121 122 123 123 125 127 128 128 130 10 131 4132 133 137 139 iat 141 142 148 10 if Deyimi 161 10. 1 Deyim Nedir? 161 10. 2 if Deyimi 164 10. 3 Biraz. da Uygulama leo 10.4 Karaleter Test Fonksiyonlan 7 Soramadiklarinz 174 11 Fonksiyon Prototipleri 175 111 Prototip Kavrams 175 11. 2 Fonksiyon Protoriplerinin Bildirim Yerleri 178 L1. 3 Standart C Fonksiyonlaruun Prototipleri 179 11. 4 Fonksiyon Prototipleri ve Parametre Kontrelii 179 11.5 Fonksiyon Prototipleri ve Tir Déniigiimleri 180 Soramadiklarmz 181 12 Tiir Déniigiimleri 183 12.1 Déniigim Kunullan 183 12. 1.1 Risa Tiiciin Ugun Tare Déniigtiiriilmest. 184 12. 1.2 Uzun T Dsiniigtiiviilesi 184 12. 1. 3 Tamsays Tiirler’ ile Gergek Sayi Tiirleri Arasindaki Déniigiimler 185 12, 1 4 Gésterici Tiirleri ile Ngili Déniisiimler 186 12, 2 Farkh Tilerin Birbirlerine Atanmasi 186 12. 2.1 Kisa Tiiriin Uzun Tire Atanmasi 187 12. 2. 2 Uzun Tiiriin Kisa Tire Atanmast 187 12, 2.3 Tamsay: Tiirler! ile Gergek Say Tiirleri Arasindaki Arame Islemleri 188 12.3 Islem Oncesi Otomatik Tir Daniigiimleri 189 12. 4 Bilingli Tide Déniigiimleri 194 12. 5 Tir Déniistiictne Operatéria 195 Soramudiklarintz 195 13 Yer ve Tiit Belitleyicileri 197 13. 1 Genel Olarak Belitleyiciler (Specifiers) 197 13.2 Yer ve Tir Belirleyicileriyle Bildirim Islemi 198 13. 3 auto Belirleyicisi 199 13.4 register Belirleyicisi 199 13. 4.1 Yazmag Nedir? 200 A’dan Z'yo © Kilawusu 13. 5 static Belisleyicisi 201 0) 15.5. 1 static Yerel Degtigkenler 201 13. 5. 2 static Global Defiskenler 202 13,5, 2. 1 Modiil Nedir? 202 13. 6 extern Belitleyicisi 205 Y 13.6. 1 extern Bildirimlerinin Yapihg Yerleri. = 207 o 13.7 const Belirleyicisi 207 13. 8 volatile Belirleyicisi 208 =) Soramachklarnor 209 14 Déngiiler 2u 14. 1 Genel Olarak Déngiler 2uu 14, 2 while Déngiileri 214 14.2.1 Kontroltin Basta Yapildyge 9) while Déngiileri 24 14, 2. 2 Kontroliin Sonda Yapildigs while Déngiileri 217 14. 3 for Déngiileri 218 J) 14, 4 break ve continue Anahtar Sézciildleri 223 (oy) 14, 5 Biraz da Uypulama 225 are 15 Onislemei Kavrams ve Sembolik Sabitler 229 r 15. 1 Oniglemei Kaviami (Preprocessor) 29 15. 2 dinelude 230 15. 3 #define Komutu ve Sembolik Sabitler 233 @) 15, 3. 1 Sembolike Sabitler Nigin Kullanihrlar? 236 Soramadiklarinz 237 19) 16 switch Deyimi ve Kogul Operatérii 239 16, 1 Sabit Madeleri (Constant Expression) 239 o 16. 1. 1 Sabit Ifadelerinin Gerekli Oldugu Yerler 239 16, 2 switch Deyimi 240 16, 3 Kogul Opecatérii 243, 16, 4 goto Deyimi 247 Soramadhklarintz 248 17 Diriler 249 17.1 Adivs Kaveams 249 nn Ieindekiter 17.2 Nesnelerin Adresleri 250 , 17.3 sizeof Operatiirii 253 17. 3. | sizeof Operatdriintin Onceligt 253 ) 17. 4 Dizi Kavramn ve Bildirimi 254 ! 17, 5 Dizi Elemanlarina Erigim ve Indeks Opermrii 255 : 17.6 Dizi Isimleri 257 oO 17.7 Dizi Elemanlanna Iisdeger Verilmesi 258 17.7. 1 Dizi Uzunlugu Belistilmeden lkdeger Verme Islemi 259 17. 8 Dizi Bildirimlerinde Belitleyicilerin Kullarulmast 260 17. 9 Klavyeden Karakter Dizisi Alan ye Ekrana Karakter Dizisi Yazan Standart C Fonksiyonlan: 260 17.9. L pets 261 17.9.2 puts 262 1 17, 10 Biraz da Uygulame... 262 17. 11 Karakter Dizileti 265 17.11. 1 Sonlandete: Karakter 265 17. 12 Gok Boyutlu Diziler 268 _ Soramacliklarinuz ant E f 18 Gastericiler 273 187 1 Girls 274 18, 2 Ayn Bir Tar Olarak Adres 274 : 18. 2,1 Adreslerin Tiitlert 215 18. 3 Adres Sabitlert 216 TO} 18.4 Gostericilerin Bildirimleri 217 18, 5 Géstericilerin Uzunluklan 281 oO 18, 6 Gésterici Operatdrleri 281 18. 6. 1 Igerik Operatdirii (") (Indirection operator) 281 18, 6. LL Igevik Operatériiniin Onceligi 283 18, 6, 2 Adres Operatiirii (8) (Address of operator) 284, 18. 6, 2. 1 Adres Operatériiniin Oneeligi 285 OO o="F=n oClErgiol|xuUao.Gonn 14 Adan 2'yo C Kilavuzu 18.6.3 Indeks Operatdrii ([n]) (Index operator) 18.6.3. 1 Index Operatériintin Onceligit 18, 7 Gisteticilerin Arturilmast ve Eksiltilmesi 18. 8 Gésterici Operatéelerinin Artirma ve Elsiltme Operatirleriyle Birlikte Kullanilmast 18.8 1 Indeks Operatérii lle Kullanilmast 18. 8, 2 Adres aperardrii lle 18.8, 3 Igerik Operardrii Te 18. 9 Gosterici Hatalart 18. 10 Fonksiyon Parametrelerinde Gastericilerin Kullanimast 18. 11 Dizilerin Fonksiyonlara Parametce Yoluyla Gecirilmesi 18. 12 Geri Déniig Defer Adres Olan Fonksiyonlar 18. 13 Géstericiler Neden Kullanilirlar? 18, 14 Géstericilere lliskin Uyarilar (Warning) ve Hatalar (Exeor) 18. 15 void Géstericiler 18. 15. 1 void Gésterieiler Neden Kullanulirlac? 18.16 Gdstericilerin Bildisimde Yer ve Tir jecinin Kullanilmass bir Gastericiler (const pointers) 18. 17 Gostericllere Ikkdeger Verilmesi Soramadillurines 19 Gasteriei Uygulamalan 19.1 Karakter Dizilerinin Uzunlugunun Bulunmasi 19. 2 Karakter Dizisi Iginde Arama 286 287 287 290 290 291 291 292 297 300 302 304 305 300 308 308 308 311 311 313 313 316 19.3 Bir Karakter Dizisinin Bayka Bir Karakter Dizisine Kopyalanmasi 317 19.4 Bir Karakter Dizisi Igerisindeki Tim Kerakterlerin Kiigiik Harfe Ya da Biiytik Harte Deniigtiiriilmesi 19.5 Karakter Dizilerinin Kargikagutaliast 319 320 19. 6 Bir Karakter Dizisinin Sonuna Baska Bir Karakter Dizisinin Eklenmesi 19.7 Karakter Dizisinin Ters Cevrilmesi 321 325 Ieindektier 19. 8 Katukter Divilerinin Heehangi Bir Karakterle Doldurulmas: 524 19. 9 Bir Karakter Dizisinin Ik N Karakterinin Baska Bit Karakter Dizisine Kopyalanmast 325 19, 10 Tei Kutakter Dizisinin [Ik N Karakrerinin Kargtlagtirclmast 326 19. 11 Bir Karakter Dizisinin Sonuna Baska Bir Karakter Dizisinin [Ik N Karakterinin Eklenmesi 327 19. 12 Segerek Stralame Yéntemi (Selectian Sort) 328 Soramadiklariniz 329 20 Stringler 331 20. 1 String Nedir? 331 20. 2 Stringlerin Fonksiyon Parametresi Olarak Kullarulmast 332 20.3 Stringlerin Omiirleri 334 20. 4 Srringlerin Birlegtirilmesi 334 20, 5 Strinlerde Ters Bolii Karakterlerinin Kullantlmas: 335 20. 6 Stringlerle Gastericilere Ilkkdeger Verilmesi 336 Soramadiledlarin 336 21 Yakin, Uzak ve Dev Géstericiler 339 21. | Giri 339 21.2 80X86 Ailesinin Gergek Moddaki Adresleme Bigimi 340 21. 3 var, far ve huge Anahtar Sézcikleri 342 24, 4 Yakin Gastericiler (near Pointers) 342 21, 5 Uzak Gistericiler (far Pointers) 343 21.5.1 Uzak Gistericllerin Aruniimast ve Exksiltilmesi 345 Jaak Gisteritilerin Karsilasunimast 346 19. 5 Dev Gastericiler (huge Pointers) 347 19.5. | Dey Gastericilerin Arulmasi ve Eksiltilmesi 347 21.5.2 Dev Géstericilerin Kargilagurilmast 349 21. 6 Uzak ve Dev Gistericiler Arasindali Lis 349 21,7 Varsayilan Géstericiler 350 21.7.1 Bellek Modeli (Memory model) 350 Soramadhlluriniz 351 FQIOLC) Operatrat Be 389 390, 392 393 395 398 398 399 401 403 404 405 407 407 407 408 410 410 410 41 412 414 415 416 418 420 421 422 a24 425 17 FQUOLC
    Operatéviiniin Oneeligti 425 25. 15 Tarih ve Zaman Fonksiyonlan 426 Soramadillanmz 426 26 Birlikler 4 26, 1 Birliklerin Bildirimi 431 26, 2 Birlik Depiskenlerinin Tarmlanmasi 432 26.3 Sayilann Bellekreki Yerlesimleri 433 26, 4 Birlik Elemanlarimin Organizasyoau BA 26, 5 Intel 80X86 Islemcilerinin Yazmag Yapisi 438 26.5.1 8086 Yazmag Yapisinin Yapr ve Birlilderle ‘Temsil Edilmesi 439 26. 6 Birlik Kullanmanin Amaclars 440 26.7 Kesmeler (Intecrupts) 442 26, 8 Intel Islemeilerinde Kesmeler 43 26.9 Kesmelerin Qaginlmast Aa 26. 10 Kesmelerle Ugili Orekler 445 Soramadiklannz 448 27 Bit Alanlart 449 27. 1 Bit Alanlarisun Bildicimi 449 27. 2 Bit Alani Degigkenlecinin Tanimlanmast 450 27.3 Bit Alanlarina Tigkin Uygulamalar 452 27.3.1 DOS'un Tarih ve Zaman Formatlans 453 Sorunadiklarinz 456 28 Tir Turumlamalars ye Sayumlama Sabitleri 457 28, 1 Tir Tanumlama Islemi 457 28, 2 Dizi Gostericilere lligkin Tir Tanumlamalant 458 28, 3 Yap, Bidlik ve Bit Alanlarina Hligkin ‘Tar Tansmlamalan 460 28. 4 Tair Tanmlamalara Neden Thviyag Duyulur? 461 28. 5 Suyimlama Sabitleri (Enumaration constants) 462 Soramadilatiniz 465 29 Yop, Birlik ve Bit Alanlariyla Hgili Karmagik ‘Tanunlamalar 467 29, 1 Yapt Dizileri 467 tgindexiter 29, 2 Flemant Kendi Tiirtinden Bir Yaprys Gésteren Yapilar 29.3 Yap) Elemans Olurak Géstericiler 30 Gnislemei Komuttar: 30, 1 Malsrolar 30. 1. | Makrolar Nerede Tanimlanmalsdit? 469 469 473 473 476 30. L. 2 Karsilagurma: Makrolar ve Fonksiyonlar 476 30.2 Kosullu Derleme Komutlari 30. 2. 1 mit 30, 2.2 d#ifdel ve bifndet 30. 2.3 defined(...) Oniglemei Operatérii 30, 3 Onceden Tanumlanmis Sembolik Sabicler 30. 3. 1 Kaynak Koda Hiskin Bilgi Veren Sembolik Sabitler 30. 3. 2 Taginabilitlige Tligkin Sembalik Subitler 30. 4 Genel Oniglemei Komutlart 30. 4.1 #undef 30, 4. 2 #error 30.4.3 #pragma Soramachklarntz 31 Dosya lglemleri 31. 1 Komut Saun Argimantan 31, 2 Dosyalata fligkin Temel Kavramlar 31. 3 Igletina Sistemlerinin Dosya Islemert 31. 4 Dosya Iglemlerinde Kulluaulan Standart C Fonksiyonlan 31. 4. 1 Dosyamn Agilmass 31. 4.2 Dosyanin Kapanimast 31.4.3 Dosyadan Bir Karakter Okuyan ve Dosyaya Bir Karakter Yazan Fonksiyonlar ya Sonunun Tespit Edilmesi 31.4.5 fgets ve fpurs Fonksiyonlans 31.4, 6 Formath Dow nin Konumunun a7 477 479 480 481 481 482 483 483 483 484 485 487 488 490 491 492 492 494 494 497 497 498 499 ag Srqguol 1MB Taban bellek DOS igletim sisteminin programlari yakdemek ve galiytirmak igin kullandijit bellektir. Taban bellek 640K uzunlugundachr. Ust bellek bolgesi cegit- Li dosamim birimleri tatafindan kullanian aneak DOS tarafindan kullanihnayan bellek alamdir. 1 MB alanen tizerindeki bélge ise, "wantiluns belek (extended memory)" olarak isimlendivilir, Uzatiimy bellesin sz konusu olmas: igin mikro- islemeinin en azindan 80286 olmast gecekir. Cxinkii 8086 ve 8088 mikroiglemeile- cinin bellek alant ten 1 MB‘den daha buyiik olaniaz. Uzanilmug bellek DOS'tw dojrudan kullanilamas, erigme yontemi cegithi kurallarla belirlonmigtir (Extended Memory Specification), Uzanlmns belleytin ill 64K hk kismina yliksek bellek bol- gesi denilmektedir, $0286, 80386, 80486 ve Pentritn istemcileri normal olarak geroek modda bu bilgeyi adresleyebilirler, Bir de “yayideny belek (expanded memory)" kaveamundan bahsetmenin yerinde olacaginr ditgiiniivortes, 640K bellegin DOS igin yerersiz kaldigiar goren Intel, Mic rowoft ve Loti firmalari 1985 yjlnda biraruya gelerek, daha (azla bellegin kullanil- masina izin veren bir kart tasarlamiy ve bu kartin nasil kullarulacagana iligkcin kn rallar belislemiglerdir (Expanded Memory Specification). Fukat uzanilms bellegin ortaya gikmasyla bictikte yayilmiy bellek kavramanin da peri plana itildigi séylene- bilit. Anca, uzatilinis bellegin yayilinus bellek gibi kullantimas: da miimbtindiie: HEHE 37 Adan Z'ye © Kilavuru rvealarma Not) DOS jpletim sisteminin 3.0 uyirlarmastyla bitline cist belek bikes de dooamn biriner tarafindaty kullantimayan bey billgelere kigGk programiucn yerleytiriles’ cevdaeckilts hu seitilmiytir, Bunun ign: HIMEM.SYS ve EMM386.EXE kurulduknan soar DOS = UM yapnimalid. Ayrica. aban bellegin Witte! amacryla J3Cun hiya beam’ yksek belle de sikleniebille Blin icin do HTMEM.SYS luruldekdsio sonra DOS = HIGH yapalman yercax: Ue tilly bellepin yiaylm bellek olarak alhandabilest. igi ele benzer bigimdes HIMEM.SYS ve UMNO 6.0% karulmy olmuddie, EMMBS6.L2XE peogeaminin ‘OEMS porarnernes, yang bel Teck chrdlaxyonunan yapemayneagant belithermets igin kevllam lr, 2.9 ALGORITMANIN KARMASIKLIGI Problemlere gGsiim yetiren birden faza algoritmik yéintem olabilir, Bunlarcan hanpisinia daha iyi oldugunun belirlenmes! icin birtakerm Olciitlerin tanmlanmast gerekir. Omegin, saydanm sirays dizilmesinde (sorting) birden [urls ydntem sow konusudur. Acaba bunlarin hangisi dijterlerinden daha iyidir? Oncelikle algoritmalacin hu; bellck gercksinimi, agthk gibi cok cegitli Glyiit- lerle bisbirletivle kiyaslanabilacepiné belirtelim. Biz burada yalnizca biz dstiine et kali olan ve adina algoritmanin karmagleliar denilen bir élciitten bahsedecesiz. Al- goritmanin karmagiklij (complexity of algorithm), sonucup elde edilebilmest ight en kéti olasihkla ihtiyag duyulan karglaytiema sayisidie, Ornegin n tine say! ant sindan en biydgiind bulan bir algoriemay: g6z6nGne alalim. Tum saysh den gecirilecedt icin bu Smekte algoritmanin kurmagkhigy n’dir 2.10 SAYI SISTEMLERI Giinlik yasnntmnvzda hepiiniz 10"luk say sistemis kullantyonu, Omefin, 123 wi bi onluk sistemde yazilmig bir sayt bize kolaylikla algilayabil digimiz birnicelik ar Jouiyor, 123 sayisrn matematiksel olarak syle ciiziimleyebiliriz SFrQuOl10 Bail C22 Dab E14 Fel 16llk sisteiiden’ 10'luk sisteme déniisiim benzer bigimde yapilabilir sneiia 1OBA sayrsiny, 10'luk sisteine déniigtiirelim. T6'lik sistemde yuztlan saytla- 20:B A fin yanunda HC barfi gorirseniz gagtrmayin! Bu harl, Pegilizce 410X169 16'hk sistem anlamina gelen Hexadecimal sizetgimiin bag- 11X16 4 aie ve 1k sistee her 0X16? hangi bir kangkdiga eden olma- 4% 169 mak icin sayin sagina yaealmak- 265, Slik sistemde (octal) ise toplam § tane simge varche. Bunlar Nansenso lil sistemde yaziimy olan 4215 gibi bir sayi 10'luk sisteme dontigtiilmel is- teninse benzet iglemler yapalir: Aiden Z'ye ¢ Kilavuzw 4215 LO'luk sistem bizim kullandigi- 9. tsistemdir, 2k sistemin ine bil 5X8 gisayar tarafindan kullanuldypent 1X82 sdyledik. Peli ya 16'lk ve 8'lik sis- 2x.g2 — tennleri kimler, nigin kullarurlar? axes ee 2189 | 2.14 16’LIK VE 8’LIK SISTEMLERIN KULLANILMA NEDENLERI ooISFQIOLKUasSO Lkilik sistemde sayslarin yazilmast ve yorumlanmast olduikea zordur. Ustelk iil sistomdeki sayilar gak yer kaplarlar. 10'luk sistem ile Z'lie sistem arasindaki d5- nigtiitme igleminin zorlujgu da’ ortadadhr. Igte 16'lk ve Blk sistemler, 2k siste- min youn bir gésterimi olarak kullairlar, Ginkir 16k ve 8'lk sistemler tle 2'lik sistem arusinda déniigiim yapmak oldukgs kelaychr. 2'lik Sistem 16'hk Sistem 0000 0001 wo10 oOnL O100 ool O11 ont 1000 1001 1010 10M 1100 M01 1110 wt mm UO eee eden 2'lik Sistem S'lik Sistem 000 O10 ol wi 110 MW Sea uveigs Gene! Kavramiar Yukarida gordiigiinii gibi 16’lik sistemin her bie basamajt 2'lik sistemde 4 bit ile, 8'lik sistemin her bir basamagt ise 3 bit ile ifade edilcbiliyor, 2k sistermdcki sayilars 16’ ve 8'lik sistemlerde kodlayarak onlart daha yosun bir bigimde itade edebiliriz. Ormegtin: 0101 £010 bir byte uzumlugunda bir sayidir, By saynn sagdan sol diirder dite. der aymarak 16k sistemde ifade edebiliris 0101 = § 1o10= A Bu durumda say; SAH oluc, 0101 1010 = SAH Birkag érnek clahe verelim: 0014 0110 1110 0100 36E4H 0100 11000101 1101 4C5DH_ 0100 01010100 0000 = 4540H 16'bie sienemde yazalmyg bir sayin 2"lik sisteme-déniistiiriiesi Geerine de bir keng Grriek vermek istivort, SFOBH = 0071 1111 0000 1017 3 F o 8 Haw SASGH = 0101 1010 1000 1100 5 A 8 C Ayn bigimde, 8'lik sistem igity de Grmekler verebiliriz, Bik Sistem ik Sistem 456 100 101 110 123 001 010 011 756 111 101.110 SORAMADIKLARINIZ... S1) Gokislemli (multiprocessing) ightim sistemlerinde birden fazla program ayn anda nasil galisyor? Bir tele mikroislemci hulurun sistemlerde baple birsey niimkiin olabilir mi? C1) Birden farla progiarmmn ayn anda calgmast demekle ayrt anda galissyor olaruk giiikmesi anlandmaktadte. Yoksa, tek bir mikroiglemel varken birden {nz- Ja progeam gergckten aynr anda galigamax, Gokigkemli isletim sistemberi bu du- rumda program!ati zaman paylagimll (time sharing) olarak , biraz ondan biraz bundan biciminde galiyunttlar. Anca programlarm sahibi olan kullamncilar hepsi nin ayn anda galigtigirn sunebilitler $2) Kilo 1000 anlamina geldigine gire, neden 1 Kilobyte 1000 byte degil de 1024 byte'ur? C2) Bilxisnyar sistomleri igin bellek miktarlarinin ikipin kathin olmast antaml- dit, Bu ydzden n kilobyte, n> 1024 byte'ur 1K =2! = 1024 byte 2K = 2! = 2048 byte ool@rgio xUn.Gonn A’dan Z'ye € Kilavuzu 4K = 212 = 4096 byte G4K = 26 = 65536 byte 1024K = 270 = 1048576 byte ‘Ayhi tanim mega byte'lae icin de verilebiliz: IMB = 210K = 1024K 2MB = 24K = 2048K 4MB = 22K = 400K 35) Biorlued desleyicileri mi daba iyictir, Micrasaft derleyicileri mi? €3) By iki derleyici grubu da birbislerinden matlake anlumda iistcin clegildis. Farkh tzellikleri ve avaniajlurt vardur. Ornegin, Borland derleyicilert derleme si- resinin kesa-olmastyla din yapmuglarchie, Mécosoft derleyicileri ise dala ayrinnht ve profesyone! dizelliklere sabiptir. Burland derleyicilerine ugum saglaraantn daha keolay aldusunu siyleyebilitie $4) Nogatif sayilarda ikive tiimleme yonteminin kullandmast mikroiglemciye ini bajtheht, yolesa-pragramcann bie warsayime midis? C4) Nepatil sayilardi ikiye tiimileme yiinteminin kullanulmast milsroislernctnin tasarimina baglichr. Ginki, igaretli sayilariizerinde iglem yapan makina komustla- 19 vurchr. $5) DOS'tw detleyicilerin giktise neden dogeudan galigabilir EXE kodu deqil? Baplayace programlara yyrica neden ihtiyay duyuluyor? C3) Bagloywe programlarm iglevleri komular ilerledikge wnlssilncaktir. Ancak gine de sinndliden hirkag sey sdyleyelim: Baglayict programlurta flinkers} en éneta- Iiislevleri; yr ay derlenmis olin modiillerin birlestirilmesinde ortaya gikmakta- dir DOS'ts farkh OBY dosyalar baplatea (link) agamasinda birléstirilerek tek bie EXE olujturabilir. Baylece bniyiik projelerin parga parca yazilmalan ve derlen- refed nfimkéin kalinmigtr $6) DOS neden (40K bellek alanins kullanabiliyor. 640K. saysst nasil bulun- mugcur? Co) Gayle de diayiinebiliriz: “640K bellek DOS taraftrdan budlanetdsgima gore, geri halan 384K husla birinuler tarafmdan kaclunnlmabtadir”. Gergekten de video earn, EPROM gibi birimler ist bellek balgesini kullanurlar, Ameak, yine de 640K cleger’ iyi hesuplanins bir defer degildir, Ganka, dst bellek biilgest igerisinde his kollanulimayan birtakam bos bélgeler vardur. Bu durumda 640K bir zorunluluk de iildir. Yani DOS pekala bir 64K daha biiyik bellek alam: kullanabilicdi is @ 5} iy e PROGRAMLAMANIN TEMEL KAVRAMLARI VE C’YE Giris Bi boliimde hem. ileride kulkunacak oldugumuz ¢esitli rerimlerin ve kayeam- {arin agiklamastns bulocaksinix hem de C’ye bir giriy yapacakstz. Cyi bi rimleri ve kivramlart ullamarak dptenmek gok daha kolay olacak. Aciklayacag my bu kavsamlant daha Gnce hig duymamny da clabilirsiniz. Bu nedenle size bi raz karmagk -ve belki de bits geteksiz- gelebilir. Fakat ne olursa olsun sonuna kadar subrlw ukumunca sulik veviria: Bu biliimii okuduktan sonra asagrdaki sorulirs yanstlayabilmeniz ve kavram- lars aguklayabilmeniz gerekir: Sorular: 1) Atom nedir ve kag prube ayrilir? 2) Bosluk karakterleri bangileridir? 3) Cldekei yasurn keuuralt nasilchie? Kavrambar: 1) Blok 2) Fonksiyoa 3) Forksiyon canmiama ve fonksiyan gajermna 4) Nesne 3) liade 6) Sol taraf cegeri 7) Sug taraf degeri 3,1 PROGRAMLAMADA KULLANDIGIMIZ OZEL KARAKTERLER Klavyede bulunan del karakerlerin basin birbitletiy st bir kangikligs gidermek igin biictin bu deel karakre kei isimlerini liste hulinde wermeke istiyori karigtrilmaktadi, Ola- 1 Tiirkege ve Ingilizee’de Karakter —Tiirkge ingilizce 4 Iki tummak Double quote Tek mmak Single quote 47 3 HClSrquolc Biiyiiktiir igareti Greater than sign < Kiigiketiir igareti Less than sign Kun Acisal paramtez Angular bracket t Bali igareti Slash be Ters boli igareti Back slash 1 Gubuk Pipe 3.2 ATOM KAVRAMI (Token) Bir programlama dili igin anlam tagiyan en ktigile birime atom (token) denir. Atomlar programilama dilletinin daha fazla anlaml: pargaya béliinemeyen en ya- lin clemanlanickr. Yaedsjimiz kaynak kod derleyici taralindan desleme isleminin ilk ajamasinda gdzimleme amacryla stomlarina ayrilmaktadsr. ‘Agagada aynt isleviere sahip olan BASIC ve C programlan mck clarak veril- migtir, Her tki programda da Klavyeden bir sayt aliniyor, I'den baslayaral klavye- den gitilen sayiya kadar olan tim tumsaydlar ekrana yazeinhtyor, inceleyiniz: i PRINT —“LUTFEN BIR SAYI GtRINIZ~ N FOR K=170N B8sexs 2 5 Programlamanin Temel Kavramian ve C'yo Girl Cc include mein { int n, ki print? LUTFEN BIR SAYE GtRINIZ\n"); seanfC%d", bn); for k= 1; k = ny +44) printiCxd\n", kz ? Ornek BASIC programmindaki atomlur gunlardse, 10 PRINT “LUTFEN BIR SAYI GIRINIZ” 20 INPUT Omek C Programmndaki atomlsr ise agogudakilerden olugmaktader: # include « stdioh > min ¢ > int on * k ; printt ¢ “LUTFEN BIR SAYI GIRINIZ\n” =) > scant & 8 ) 3 for ¢ k = ; k < n 7 oH k ? printf ¢ “wins kD ; > A'dan Z'ye C Kilaver Bir kaynak kodii atomlarina uyieken, o kaynak kodu yardigumiz programlarna ili hakkinda da bilgi sahibi olmak zorundayiz. Iglevleri ayn olmasina kargin ‘r- nek olarak verdigimiz BASIC ve € prmgramlaninm atomlari birbislerinden farklic: Atomlart da kendi aralannda griplara eytrabilirie. 1) Anahtar séizciikler (keywords, reserved words) Burdar dil igin belli bir anlam tagiyan, degisken olarak kullanilmast yasaklare- amy olan sozetiklerdi Omek BASIC programinda: PRINT INPUT FOR 10 NEXT END Ornek C programmnda: Anclude int for tomlavt bu diller igin birer unabtar séaciiksii, Dilin semantik yaprsinin belitlen- mesinde anahtar sézcikler en dnemli rolit oynorlur: Bildipiniz gibi BASIC te anah: tar sbzciiklerin biiyiik ya ci kiigi harfle yazalmast farketmemektedic- Oyse C’ de biitiin anahtar sSzciikler kiigitk hurflerden olugur. 2) Degiskenler (Identifiers, Variables) Degigkenler, énceden betirlenmiy belirli kurallara uiymak suretiyle ismini iste- digimiz gibi verebildiximiz atoenlardie. Bu atomlar genellikle bellekte bir yer be- lirtiler. IFQUOLKU.GoOnnr Ornek BASIC progeamindn: K Ornek € progeaminda: WY i ; main n f<—. « printt l stomlart birer degigkendir. 3) Operatéeler (Operatars) ‘Operatorler énceden tanimlanmis birtakum iglemleri yapan atomlardar. +, ~ 5%, 4, <>, birer operatordir. Programlamanm Temel Kavramian ve C’ye Girls ir Omek BASIC programindaki tek operatir: atama operardriidiir, Atama operatéra sai tatafiaki degerin sol taraftaki deigken ile belittilen bellek bélgesine yazilmasint saglayan bir operarordiir Omek € programmdaki operatétler: G22) fonkslyon gagiema operatérit gdsterici operatini atama operutéirii iligkisel operator arirma opecatiird 4) Sabitler (Constants) Dogradan igleme sokulan, degigken bilgi igermeyen atomlardi, C = A + B ifadesinde Ave B depiskenictinin iglerindeki saydar toplanarak Cye atanmaktadir. Oysa, = A + ADiladesinde 10sabiti dorudan A ile toplanmaktadhr. Omek BASIC ve € Programunds bir tek sabit atom vardir: 1 5) Stringler (String literal) Bunlar, iki urmak igerisindeki karakterlerden olugan acomlurdie . Stringler programlama dilletinin gogunda tek bir atom olarak ele aliniclar; daha fazda puar- gaya béliinemezler. LOL main® printf("Merhabs C\n"); > Bu program ekrana Methaba C yazssint basan yalin bir C programichr Bu programin ilk sats olan include ifadesi, stdiouh isimli dosyanin derleme iglemine dahil edilevegini anlaur. Bu dos: yanin neden detleme iglemine dahil edildidini ve igerisinde nelerin cldugunu su anda sgiklayamiyonue, Cankii bu dosyanan igerisindeki ifadeleri yorumlayabilmele icin cok gesili bilgilere sahip olmak gerekir. Uzantst.h olan bu tir dosyalarin ige- riklerini 6frenme siireci icinde yavag yavag céziimleyecepiz, Bu konuda accle et meyin!.. Incelememize devam edelim: main () ie 9 Si e e 2 ® M printf Merhaba C\n"); Programlamanm Temel Kavramian ve C'ye Girig mainbir focksivondur, C'de altprogramlitrs fanksiyon deni. C'deki fonksiyen- luz, FORTRAN'n subroutine’ Jeri, PASCAL ve CLIPPER’ procechare'leri gibi sltprogearlardie. main’in biv fonksiyon oldugunu onu takip eden fonksivan. ope- eatériinden antiyoruz. (u) Fonksiyon operatériidiir . Bu operatériin solundaki ifadeler C dezleyici- Jeri tarafindan biter fonksiyon olarak yorumlamelar. Ohalde printf de bir fonksiyondur. (printf stzciigiini print~ef bigiminde okuyunuz, Buradaki f, lngditce function séeciiginden depill format siizciigiinden pelmekcedir), printf('Merhaba ¢\n"); fainile print? fonksiyonlann: birbirleriyle kurgelagunin. Ne gérdiyorsunuz? #include main € printf('Merhaba €”); ¥ Tik wiirebildiginie sariyorum, fonksiyon operatdrii diye adlandirdygimye paran- terleruen main’e ait olaninin icerisinde hicbir sey olmadigy halde, printf inkinde iki umak igerisinde bir yerrun oldupudur, String ifadelerinin tek bir atom oldu unui animsayanue Fonksiyan operatérlerinin isindeki ifadclere parametre denir. Buradan Gmepimizdeki main fonksiyonunun parametresiz, print? fonksiyo- nunun ise paramerreli oldugu sonucunu cikarsbilirsiniz rain fonksivonundan sonra agilan ve kapanan.ktime parantedlerin’ taleyiniz C’de kiime parantezleri arasindaki balgeye blok denir. Grnesin ayabicaki gekilde toplam iki blok vardsr 2. blok 1. bloguun igerisinde- dir, $ekili inceleyiniz 2. Blok | 1. Blok Bloklama amactyla kullandyfimiz kiime parantezlerini (brace) fonksiyon ope- fatéri olan normal parantezlerle (parenthesis) kangcurmayinix: Verdigimiz Grete danersek qoyle diyebiliriz: main fonksiyonu bir blok igermektedir ve printf bu blogun igerisindedtir. mainsu bicimde devam ederken, main() printt ise gayle devam ediyor: printf Merhabs C\n"); main ve printf, ikisi de birer fonksiyondur. Ancak main tantmlanmis printt ine cairlamgtie. main'in tanimlandigint fonksiyon operatilerinden sonra gelen blok isleminden print fin gajwildigint ise forksiyon operatorlerinden sonra ge Jen noktall virgdi’den ¢;) anbyoruz. main programm calismaya baglichga fonksi- yondur, Diger fonksiyanlardan bagkaca bir fark yokrur: C programlan oa in fonksiyonundan calismaya baslar. (Bazs durumlarda noktaden sonra bilerek keligik haefle baslryoree Cinkil C’ de biiyish ve hiigiike harfler diger dillerin aksine farkls kurwkterler olarak cle atwcartar. Yumi Chive barf ,baicitk harf duyarliligs olan pir difdir (case sensitive). Eer biz noktadan sonra, retin Main dive haslasaydek dilbilgisi butasindan gok daba bit- ik bir C batose yapens olucoliik. C'de hata yapmnamaye tencth edevoruz. Dilbitine ciler dizi affetsin!) 3.8 FONKSIYONLARIN TANIMLANMASI VE CAGRILMASI ‘Tammlanms fonksiyorilar bizim tarafimezdan yazilmig olan fonksivonlardic, Oy: sa, fonksiyonlarnn cagrimasy onlanin icraya davet edikmest anlanuna gelir, Kush suz, bir fonksiyonun gagriibilmesi igin onun daha Gnce birisi tarafindan tamm~ lanmis olmast gerekir Fonksiyonlar her zaman tantmlanmus fonksiyonlarn igerisinde gngeiabilirler. Tanmmlanms fonksiyonlaran bir ismi ve iglerinde ne yapacakdarina iliskin kod- lari yarsh olduiiu bir de govdesi vardir main’) > Fonksiyon Ismi { CISrgQliol main ¢ > « printf c “Merhaba C\n™ Klavyeyle yazarken bosluk birakmak igin kullantian kuraleterlere boglak katrakter: Jeri diyoruz. Boslik karukterleri tig tanedir. 1) Ara tusuna basarak elde ettigimiz bogluk karalteri (SPACE): Hex Wh, Desiraal; 32 2) Tab tusuna basarak olde ettigtoniz bogluk karakteri (TAB): Hex: 09h, Desi mal: 9 3) Metin editirlerinde Enter tuyuna basarak elde ettittimiz bogluk karakterle ti (ENTER): DOS alrinda metin editéelerinde Enter tuguna bastldiginda mesin dosyasmna iki karakter yazilmaktadse: CR (Carrige Return} Hex: 0D, Desimal: 13 ve LP (Line Feed): Hex: QA, Desimal: 10 Bosluk karakterlerini dzctle; SPACE + TAB + ENTER (CR/LF) bigiminde belirtebiliniz, Corin genel yattm kurult: Atombar urasinda istenildigi kadar bogluk karakteri bu funabilir ve yan yana bulunan anahtar sieciikler ile degighenler diginda tiim atour lar istenildigi kadar bitisik ynzilabilicler, # igeren suurlar bu kurala dahil degildir. Bu durumda yukandaki C programs, degin sbarti bir bigimde agagidaki gibi yacdlabilirdi include main « ? t printt « “erhaba ¢\n" s o = il 57 Hele GIOKXU.GCGom Adan Z'ye C Kilavuzu ) } Ya da yine aburtil olarak: #include main€){printf Merhaba C\n");? yozilabilir, Bu iki yazim bigimi de yukatidakj kurala uymaktadir. # igeren satrlar diger satirlarla birlikte yazilamazlar; fakat bunlar digindaki batdn atomlat istenil- digi kadar bitisik yamlabilirler. Programlama dillerinde atomlarin asta béliineme- yecejiine dildlast ediniz. Gergekten de C derleyicileri kaynuk kodu atomfarina wyt- rarken bogluk kurskterlerini atom aytraglart (token delimeters) olacale kullanertar: Cee bu kadar serbest bir yezim kural elmasina kargen en gok yurgulanan te- malardan bir tanesi "“kaymak kodur okvenabslirlite (readability)” dir. Programlama dillerinin degerleme Agtilerini ele aldygim 1. Baliimde agikbamagnke: Okunabi- Tirlik, kaynak koda balulines ne yapilmak istendliginin kolayhkla algulanabilmesi- dir, Jyi bir © programers ile deneyimsiz bir C programersim aytean en Snemli Szelliklerden bir tinesi okunahilirliktir. Unlii bir sistem programessina sate goriiyoruz, Bu santm mutluka yazilmas: gecckir mi? Bier her zaman yaail- must gerckiyorsa, neden derleyici bunu ywailims varsayarak bizleri bu zahmetten ‘kurtarmuyor? €2) stdio.h dosyusinm igerbinde neler oldugunu bilsek bu soruya yamt ver- mis olacaj. Simdilik yalnzea yunlart séyleyebiliria: Ba saurin yazilmass, yani UoGoORR OLX U oolSirG}) Programlamanin Temel Kavramian ve C’ye Girls stdio. h desyusinin derleme iglemine dahil edilmesi bazt durumlarda mutlak 20- runlu olmasa da go8u zaman gereklidir, $3) Her C programinda main fonksiyonunun bulunmast gerekir mi? Bir C programinda birden fazla main fonksiyonu olabilit mi? 3) Ever, her C programinda bir main fonksiyonu bulunmast gerekiv (Wis- dows alunda gallgan C programlarinda main fonksiyoou yerine WinMain fonksiyo- ‘nu vardis). Ctinked main fonksiyonu progeamn galismaya basludiga yeti belirtmnek- tedir. Standart C'de aynt isimli birden fazla fonksiyon olamaz (Fukat C++'da farkl: parametrelere sabip synt isimli birden fale fonksiyon olabilmektedie|. S4) Nesne ile degigken kavramlats ursinda the fark var? C4) Nesne bellekte erigilebilir olan bir bélgedir; degighenden daba genel bir anlams vardic. Oysa depigkenler isimlerini bizim. verdigimiz nesnelerdir. Birgok. durumda iki terim ¢ anlambymug gibi kullanilmaktadir, Her degisken bir nesne- dir; fakat her nesne bir dejisken degildis. Gostericiler konusundan sonra anlam- lanchrabilecefiniz bir Grnek verebilin: * (char *) OX1FCO ifadesi bir nesnedir, ancak deisken degildis WIOD "AY IOIBISD WAWAann conn & @ 2 CGUOCU. VERI VE NESNE TURLERI B: baliimde C'deki veti ve nésne tirlert hakkunda bilgilet bulacaksint Tir bir nesnenin en dnemili Geelligidir. Clink’ detleyiciler nesneleritdirlerine bakark sumlartar, Nesnelerin azuniuklant da tinlerine bagh olarak degiymektedir. Bo- lim igerisinde tir ve uaunluk arasindaki iliskiler cok gesitli donanimlar gavénis ne alinaruk ayrintih bie bigimde incelenmektedir Bu bakimii okuduktan sonra agajidaki sorulan yunttlayabilmeniz gerekir: 1) C'deki veri tiirleri nelendir? 2) Veti tiirlerinin DOS we UNIX sistemlerindeki weunluklart ne kadardie? 3) Igarctli titrler ile igaretsix tiirler arasindaki farklar nelerdir? 4) Isuretli tiirlerin mgmast ne anluma gelir ve sonuglar nelerdir? 4.1 TUR KAVRAMI “Ver titer? tacnlamast *resne tarleri® tamlamasindan dal genel bir atlam iger mektedi. Giinksi, “veri” terimi bellekte yer gastersin ya da néstermesin biittin bil gileri kapsar. Yani hem sabitler hem de nesneler “veri” olarak yorumlangbililer Veriler Sabitler Nesneler Tar biluisinin bir nesne Szelligi oldugunu dneeki bilimden anumstyorsuniz. Bir nesnenin tira deyince, o nesne igerisinde rarulan bilginin detleyici tarafindan yorumfants bicimi anlagilmalidir. Nesnelerin viileri, bize ayn zamanda onlarin belickte kapladigi alan hakkinda da bilgi vermektedir ~ ool@rguio x= int DOS alunda galigan derleyicilerde long tiirti, int tiirtinden ikki kat daha uzun dur. Fakat UNEX tabanh sistemlerde long ile int tirlerinin ikisi de bithirine esit iS @ ce si @) & Veri ve Nesne Turleri tir. Oxetle séyle diyebilirtz: UNIX tabanks sistemlerde int tiirti ile long tiirli arasinda islevsel highir farkl- bik yoktur. Ancak DOS’ to long (32 bit) int trimden (16 bit) di kat daha weun- dur. Agagica lang tintindin belli bagh donanimlardalei waunlugu verilmistir DONANIM Jong TURUNUN UZUNLUGU (Bit) INTEL 80X86 (DOS, WINDOWS 3.1) 2 INTEL 80X86 (UNIX, XENIX, WINDOWS 95) 32 3B 32 DEC PDP-1L 32 DEC VAX 32 HONEY WELL 6000 36 IBM 360/370 32 INTERDATA 8/32 32 MOTOROLA 68000 32 NSC 16000 32 ZILOG 8000 32 Bariin bu anlatilankar dzerine goyle bir sory akliniza gelebilir: “Onceki halimlerde Chin cok tasnabilir bir dil oldagsunu soylediniz. Peli nast! luyor da daha temel veri rirlerinin uauniuklart bile her sistemde aynt olmuyor ve standar- ize edilmemig oluyor? Bu durum tajinabilirlige engel olvsturmuyor mu?" Gergekten de € difrencileri isin bagindayken hakh olarak bu soruyu hep so- sarlat. Ovsa, biz bu senayu ancak soncaki békimlerde birtakam kavramlart grese dikten sonra tarm anlamayla yanntlayabiliriz, Simdilile sun séiylemelde yetinecesiz: Code, veri tiirlerinin uzunluklarindan dolayt olugan taginabilitlik problemleri- ni giderici mekanizmalar da vardir. char: Uzunlugu en kaso olan tiirdir, Sistemlerin hemen hepsinde ehar tirtiniin urunluge 8 bittir. Code char tirayle int, short ve long tirleri arasinda uzunluklarindan bagka ig: cvsel higbie fark yoktur. Diger dillerin aksine C’de char tiirii de diger tirlerle aritmetik, mantiksal, vs, iglemlere sokulabilir. char tiirdyle int, short ve long tier! arasinda ueunluklarmdan baska highir fark olmamast sii birax gagurtabilir, Gtinkii yikksek seviveli dilletin hemen hepsin- de bu tirler farkli Svelliklere sshiptir. Ornegin, karakter nesneleri yalnuz chat bil- ‘A’dan Z'ya © Kilavuzu gilerini sulelamateigin ullandirlar, Syle bir sori: da sotabilirsiniz: "Maclem ara ‘inda bir face yok, peki o 2aman neden bu titrin ismini chur (karakter) koymu- lar?” -lsninin char olmast bu tiriin uzunlugunun sistemlerde kallaniian karakrer uaunluguna eit olmastndan kuynalelanmaktadis. Gergekten de yu tits, kataketer bilgilerini ifade edebilmek igin-en ckonomik olan tiediir char tiiriiniin wunhigu sisterlerin hemen hepxinde 1 byte yuri 8 bit oldugu nia pire: 1 byte iginde yaztlubilecek en biiyiik pozitif tamsayt: Iilik sistemde Out mu Onaluik sistemde 7 F Onluk sistemde +127 En kkiigitk negatif says: Thilik sistemde 1000 000, Onalubk sistemde 8 o Onluk sistemde 128 bigimindedie. : Bu tir gergek saytlart belirttmekre kulbunilir, Powiti! ve ricgatil olubilirler in: =12.7B6950, 304.747322, 3.141592... float tii jstlsna birkag sistem digtnda hep 4 byte uzanhagundadir ve Gzellikle ke- sir Sas igin kullandielar ve hellekte tamsayilardan farklt bie igimde taralurlar, double: Bu nar float virdinde oldie gibi pozitif ve negatif kesirli saytlans Ilude etmek igin kullanilir, oat tiirdinden iki kat daha duyarhhdidar, Sistemlerin hemen hepsinde 64 bit (& byte) aunlugundadie: Ara ettiginiz hesaplama gergek sayt uvarldigindan daha fvela bir duyarlbk gerektitivorss bu tart kullanabilirsinie Jong double: double tiirinden aba yitksck duyatllygs sabiprir. Bu tir sistem- Jeiin hemen hepsinde 10 byte uzunlugundadir, Ancak tong double tirit her © derleyieisinin destekledipi tagunubilir bir vir degildir Not: Gergele saylarin bellekte turulmalarina iligkin ANSI / IEEE 754 standard: “Ekler »A-1" béliimiinde ele alimmaktadir, CISPQVOLKU.Gohnr 4.2 ISARETLI VE iSARETSIZ TURLER Yukarida inceledigimiz:tislerin hepsi pouitif ve negutif olabilen igaret tinherdir < Bunlanin yanssinat déire veri ariiniin bir de igaretsiz olan bigimleri varvhr. lgaretsiz tiirlerde sayilarn en solanda bulunan bitler igaret bitleti olarak ele almmazlar; bs bitler diger bitler pibi yorumfanurlor, Igsretsia tirlesin hep positf oldullan varsa yale ‘Ver! vo Nesne Tarleri [saretsiz tiitler isuretli olan benzerleriyle aynt weucluga sabiptirler; ancak posi rif simielun iki kat daha bayiikeair. Agaguda *igaretsiz bigimleni olabilen” 4 tira go riiyorsunur: Agapicaki tabloda ise igretsiz titlerin sur degerlor! verilmistir, Iyaretli olan bigimleriyle karsilaguinnez Tiir Belirten Sum Degerleri Anahtar Sézciik [signed] char (-128, +127] unsigned char (0, +2551 (signed) ine [-32768, +32767] unsigned [int] [0, 655351 [signed] long Lint] [-2147485648, +247483647] unsigned long [int] (0, +4294967295 } Ornepin: 4117 1010sayist igurecli olarak -6, igaretsiz olarak +250 biciminde yorumlu. aur Sen olutak gimdiye kadar gdtmiig oldujgumuz veri/nesne riirlerini iki grubs ayarmak Istlyovuz, Kbgeli parantezler igerisindeld anabrar sozeukler ywal va da sézl anlanmlarda kullanidmayabilirler, 1) Tamsays tiirleri [signed] char unsigned char short Cint] unsigned short Cint] Csigned] int unsigned Cint] [signed3 tong Cint] unsigned Long Cint] 2) Gergek Says Tiitleri float double long double: 67 VATA CSrgliolxUn.Gonn SORAMADIKLARINIZ St) Cde yanlabilecek en bilyik tamsayt olan igaretsiz unsigned long’ un 2 a batik sayilar nasal ifade: edilecekler? Enflasyon da malumunuz, Birkag yil icinde milyar « gantumiza daha fazle girecek. © zaman alacak verecekleri hangi nitlerle ifade ede- bilecegiz? C1) long sinaclarm ayan tamsaythirs gergek sayt Formatinda double sii ile ifa- de edebilirsiniz. Abarth biyukdakteki siyilar ise ancak programe: tiralindan ta- numlanan yaptlar igerisinde turulabilirles . Konular ilerledikge bu sorunlarmn tiste sinden nasil gelinecepini kendiniz bulacaksinvz $2) ine tri) neden rmakinantn donanmina baglidar? Omegiin, neden “hep 2 byte ya da 4 byte uzunlugundadie” bigiminde standardize edilmemistir? C2) int tirii C programlarinda en fazla ishem géren tittdiir. C gok deal bir dil dit, int tiviiniin miktoisemcinin bir kelimest kudar olmast da bu dogallk ile uyum igindedir, Decleyicileri yazanlar ve uygulama programettan - farkinda of- ‘masifar hile - bundan yarar saglarisr. Daha ayrinul bir yarn iginde bulundu muz duruma uygun gotmedigimizden bu kadanyla yetineceBis $3) DOS'ta short ile int, UNIX te de long ile int tinleri arasmda gergekten hig: bir fark yok muchur; bunlar tamamen esdeger ticker midis? C3) DOS'ta short ile int, UNIX’ce de long ile int iglevsel olaralt tamamen synt \ilerdir; aralarnda hig fark yokeur. Ancek sizin kaynak kodonuydla buntardan hangisinin olacas twyinabilitk agisindan Gnemli olabilir. Omegin siz, DOS‘ da 2 byte UNIX'te de 2 byte uzuntuka bir tamsayt tira knllanmak istiyorsantz 0 23 man short tiiiina tercih etmelisiniz, S4) Bilgisayarda heryey Vler ve 0' lardan olustuguna gore noktalt sayslarin bel ekte saldanmasina iligkin bir kural var midir? Hoat ve double tirleri bellckte na- sil tunaluyorlar? C4) Noktali saytlann bellekte saklanma bigimleri tam olarak standardize edit: memigtic. Noktali saysharin saklanmysinda 2 énemli standart varehr, Bunlardan. bi rincisi- ki en yaygn olarak kullanilanidir- TEE (The Institute of Electrical and Electronics Engineers) standarchdir. (megin, 80X87 matematik islemeileri de bu standards kullante, Ikincisi ise daba az kabul géren Microsoft Binary stancar- didir. Microvoft bu forman eski BASIC derleyiciletinde kullantyordu. Ancak daba sonta kendisi bile bu formartan vazgecmistir. ANSI / IEEE 754 gergek sayt formatlan “Ekler -1-A* bliimiinde ayrinals bir bigimde agklanmaktadir, $5) Gergck say: titleri eden tamsayt tiirlerine gre daha uzun tasarlanmislue- du? double ya da long double gibi yiksek bir duyarlilk igeren tiirlere gerck var midi? C5) Gergek sayilarin bellekte tutulma bigimleri, bunlarla yapilan iglemlerde yu varlama hatalarmin (rounding error) olusmasina yo! agmaktadir. Yuvarlama ha ee 68 Veri ve Nesne Turlert talari Gnemsis gibi gorlinse de garpma ve bilme islemleriyle biyliyebilir. Yuvar lama hatalaniu en aza indirmek, ancak gercek sayilan daha bite duyarhlikla ifn- de eimekle miimkiin olabilir. "Eéler 7-A" béliimiinde gergek sayt formailart ve yovarlama haralan hakkanda hilpiler bulacaksmee, 86) Mikroiglemeilerin biiyiik gogunlugunin yalnizcs tamsayilar ixerinde ig lemnler yaptigi soyleniyor, Bu durumda gergek says iglemleri nasil yapilryor? C6) Oldukgn teknik bir soru oldugu icin, kisa bir yanit vermekle yetineceRiz. Gergekten de yaluwzea tamsayilar Gzerinde islem yapan mikroiglemcilere sergcke sayt ijlemlerin’ yaptirmak igin makina: seviyesinde altprograralar (kesmeler ya da fonksiyonlat) kullanilr, Iki gercek sayin bu bicinde toplanmast biiytik bir zw man kaybn olugturmaktadir 80X86 ailesinde gergek sayi iglemlerini hizh bir bi- gimde yerine getirmek igin $087, 80287, $0387 gibi matematik islemeilen den fay- dalanimaktadir, $0486 DX ve erties iglemciletinin matematik islemeist kendi igindedir $7) Neden gergek sayt tiirlerinin igaretsiz: bigimleri yokrur? C7) Gergek say: ttileri IEEE 754 ntwnaralt standardia gre igaretli bir biginde tasarlanmigir, Gergek sayr islemlerini yapan matematik iglemeiler de suyilary hep Jgurethi olarak ele alirlar, Gergek say: tirlerl yeteri kadar wxun pldujumdun igaretsi olarak ele alinip duyarhhigin arurilmasina gerck duyulmamusnr. Isaretsiz trlerle iglem yaprau ek bir donanum ve yarslim maliyetini de beraberinde getirir 69 WOOD" OUBIDLORARARA oCOnn CGUOKU cer o BILDIRIM VE TANIMLAMA u baliim nesnelerin kullaniimadan Gnce derteyicilere tansilmass ile ilpilidir. Bildirim (declaration) ve tantslama (definition) iglemlerinin nerede ve nasil 1 igerisinde ayiintih bir bigimde ele almmugur yapitlacapi bil Bu baliimié okuduktan sonra agagedaki sorulam ynnitlayabilmeniz. gerekir: 1) Bildirim ve tanmlama kavetmbust te anlama gelmektedic? 2) Bildirimler nerede yapilabilirler? 3) Bildirim isheminin genel bigimi nasildur? 4) Noktab virgiiliin (;) islevi edit? 5.1 BILDIRIM VE TANIMLAMA KAVRAMLARI Modern programlama dillerinin gogunda nesneler kullaniimadan énce derteyici- ye tnmtalirlar Kullamlmadan dnce nesnclerin dzellikleri hakkinda derleyiciye bilgi verilme- si islemine bilditim (declaration) deni. Detleyiciler bildivim ighemi sayesinde nesnelerin hangi Grelliklere sahip oldule- larint anlarlar. Nesnelesia subip oldulclary zelliklert celrar anamsatmak istivoruz NESNE OZELLIKLER! isvi OEGER| TORU FAALIYET ALAN! OMRU Nesne yiratan bildirimler igin tanumlama (definition) teria kulluniloyaktacle. Tanimlame ve bildirim kavrumlist ardarindaki benzeddike nedeniyle sikbkla bir birlerine kangtinr, m1 Aidan Z'ye C Kilavurw ‘Tanumlama nesne yaratan bir bildirim iglemidir. Derleyici bir tanmlarna iglemiyle karsilasinen, tiesrenin belitilen ézelliklerine tuygun olarak o nesne igin bellekte bir yer takisis eder. 5.2 BILDIRIM ISLEMININ GENEL BiCiMi MWR CIS’GIOLCKUI-Gonnr Bildirim islemlerinin yupilg bigim ve kurallars dilden dile degigir Genel Bigin: nesneiC, Cnesne2, Cnesne3J,...J; Yukandaki genel ydsterimde tiie, nesnenin hangi tiire ait olduginu gisteren bir anahtur sézetikriir. Nesne tiltlerine iliskin anahtar sézctikleri dneeki baltimde vermigtiks yeniden animsatmak iaciyoruz: Tile Belirten Ununiuk (byte) Anahtar Sozciik bos 1 UNDX WINDOWS 3.1 WINDOWS 95 [signed] char 1 [signed] short [int] 2/2 (signed) int 2/4 [signed] long Lint) 4l4 unsigned char L unsigned short [int] 2/2 unsigned [int] 2/4 unsigned long [int] ala float asa double 8/8 long double 10/10 Yukarrdaki géscerimde bara unahtar séxeciikler kéigeli parantezler igerisinde ya ailmigair, Kégeli parantezlerin yrzalmast zoruniu olmayan yani istege bagh olan iby deleti gasterdigini animsayine, Daha acik bir antaumla: signed short int yerine yalneeca short ya da signed long int yerine yalnizca lang yuzubiliri2. C derteyici- ler short ve lang anshtat sdzcuklerini gétduklerinde onlatt signed short int ve signed long int olarak kabul ederler. Burnda oldugu gibi bundan sonra da genel gosterimlerdeki kageli parantezleri, yazalp yazilmamas “itege dale olan {optional)” ifadeler igin kullanacap2, ‘Tir belircen anahtar sGzciikten sonma aralarma virgill koyarak birden fuzla nes nenin hildirimi ayn anda yapulabilir, Virgal (,) ileride ele alinacak clan bir ope- Bildirin ve Tanimlama rarardiir, Genel bicinde kullandygumu iig nokta (...) ise (Pye iligkin bir xintaks degil; iudenin benzer bigimde devam edecegini anlatan ve bizim trafimredan kcullanilsn bie gésterim bicimidir, Bildirim iskeminin noktab vingil (;} ile bittigine de dikkat ediniz Ornek bildirimles: int a, b, ¢7 float tutar; char c, ch long int x, ¥, 27 short al, a2, a3; long x1, yz double dt, d2z Atomlar arasinda istenildigi kadar bosluk karakterleri kooulabilece@ini sarim- saymue int a, bs Dildirimind istersenix, Genein: higiminde de yarabilirsiniz. Faket en okunabilic bisim! tercih etmelisini! Yukuridaki bildivim iglemiyle, derleyiciye mesnclorin tm ve ti! halanda ayik bir bilgi vetiyoruz. Peki desleyici diger nesne dzelliklerini nasil anhyor dersiniz? Bu sorunun yan igin biraz sebretmelisinia! 5.3 NOKTALI VIRGULUN ISLEVi Code noktalr virgil (;) sonlandirct olarak grey yapmaktachr, Onceki bikimlerde noktali vitgiliin ayinag tirdnden bir atom oldupunu belistimistik. C'de bi deler noktals virgil ile birbirlerinden ayrilielar. Gmegin: wp eeaets Ged= 1; ifadelerinde noktal vingiller iki aye ifadenin varljurn gasterir. Eger noktale virgiil olmazsa derleyicl iki ifadeyi tek bic ifade gibi cle almaya galsgacak ve buns bir anlam veremeyecektir aparzat cuc-1 73 A’dan Z'ye © Kilavuzu Diger dillerde naktal virgill yerine bagka sonlandinict karakterlerin kullanlds fun da govebilirsiniz. Ornegin, BASIC'te ya da sembolik makins dilinde Enter CCR/LE) sonlancinict karakter olarak kullarubir. Burda her ifadenin syst bir satir halinde yaztnasiny gerektirmektedir. 5.4 DEGISKEN ISIMLENDIRME KURALLARI i) FEVOL IUkdeger verilmesi (initialization) genellikle sabitler yoluyla olsa da Geel dunumlar diginda bile bir zorunluluk yokeur. ‘ int a = 100; int b = a; oo 6.13 printf FONKSIYONU UZERINE KISACA... Coe ilerleyebilmek ign artik dejiigkenlerin igindeki deterleri ckrana yazsltrmnamz gerekiyor. Amacimiz pringf fonksiyonantn ayrintilarim anlatmak degil; yalnzen isimize yarayacak kadar bilginin bu agamada yeterli oldugunu dagtinayoruz printf birden faela parametre alabilen bir fanksiyondar. Ik parametsesi her za obel@rgiol maint) ‘int a7 char ch; a = 100; ch printf("a = ad ch = Ren", a, ch); + Bu programin giktss: a= 100ch=A bigimindedit, Bire bir eglemenin nasil yapildigunn inceleyiniz: Sabitler printf(‘a = %d ch = %c\n", a, ch) f ty ‘An! (new Line) karakterinin “inaleg agai sider bagina geo” anlamina geldigini aninisayinuz. Bu fade ekeana hasild:ktan sonra imleg (cursor) agagi satrrin bagina gegecektir ch ="A’, ifadesiylé aslinda eh degiskenine 65 karakceri atanmigur. Eger printf fonk- siyonunun paramercelerini agagidaki gibi depistirirmek printfa = %d ch = Yd ch = uc\n’, a, ch, ch); ekrandaki gOrdinti de agagnduld gibi ole a= 100 ch= 65 ch=A Glink’ Xe, ch deffiskeninin igerisindeki degeti *karokter olarak", 2d ise “ramsayt olarak yaz” anlamina pelmektedir, print? ile formar karakterlerini kul lanmadan ekrana yalnizca mesaj da yazeirabiliviz, printf(Lutfen bir say1 girini gibi SORAMADIKLARINIZ... St) Tek trmak icindeki karakterler ashnda bu karakterlerin ASCH tablosun dai sira nomarasini gsterdligine gore: char ch; ch yerine ch = 65; (Amin ASCIE kargilogi) yazabilir miyix? G1) Bu iki ifade aslinda ay iglevlere sahiptir; aneak farkunda oltmams birgey var: 65 sayist bir int subitidir; ch = 65; — $1 oOlSrGgiol|xUn.Gonn Adan Z'ye C Kikvueu yaemakdla ch degiskenine bir tarsays sabiti atamts olursunuz, Cde fark virlevin bitbisletine acatunst hata olusturmaz; bu iglemde de bir hata yokrur, Fakat fark- iv tinlerin birbirlerine atanmastein anlatldigt 10, Baliime gelenc kadar byte hir iglemden kaginmalisinte. $2) C'de iamsayilart 10'luk sistemin yonisica 164k ve B'lik sistemlorde de vezabiliyoruz, Acaba 2'lik sistem igin de bir gésterim bigimi var mi? printf fonksiyenunu kullanarsk bir depigkenin igerigini 2'lik sisvemde ekrana yaz- dirabilit miyiz? C2) Cde tamsay: sabitlerini 2'lik sistemde beliremenin bir yola yak. Depiskens lerin igeriklerini. printf fonksiyomy kullanarak da 2'like sistemde ckrwna yax- diramayse, Fakat, bunun gok cegitli yollar olabilir, Herideki balimlerde somut bir uygulama bulacaksmz; UConn FONKSIYONLAR v baldim tiimdyle fonksiyonlar kenusuna ayiiousis, Fonksivos kovrant, fonksivonlann geri déniig degerleti, ranumlanmnalary, gagralrmalarr gibi ternel komular boli igerisinde aysinul: bic bigimde ele altumaktache. Baliimiin senuns da ise klavyeden karakter alan C fonksiyonlart hakkinda bilgiler bulacaksum, Bu baliimii okuduktun sonra asagidakci sorulars yunutlayubilmeniz perckie: 1) Fonksiyonlann geri déniiy degerleri ne anlar gelmekredir ve neden leulla nih? 2) return anahtar siectigiiniin iglevi nedi? 3) void anahtar stizctgtiniin ishevi nedir? 4) Fonksiyon parametreleri nasi! tarumbanis? 5) Baglayicilann (linkers) fonksiyoniarla ilgili ighevleri nelerdis? 6) Standart C fonksiyonlan ne anlam ifade etmektedic? 7) Kiitiiphane nedir ve hangi amaglarla kullaniler? 7.1 FONKSIYON NEDIR? Ce altprogramiara fonksiyon (function) denit. Her fonksiyon faydalt birtakum iglemleri yerine peticmek igin tasarlanir ve gagnihr. Fonksiyonlarm, onlar gagtean forksivonlardan aldiklar girdileri ve yine anlar gajarmn fonksiyunlant gander- dikleri gdkulany vardir. Girdiler Giktiar FONKSIYON = }________» Parametreier | Gari Dénds Degeri (Return Value) Fonksiyonlazin girdilerine pasametreler ya da argtimantar diyorue, Bir Fonksi- you -icta siiresince belli amaglart getgeklestitmesinin yant eira- jerast sonunda bir degeri de gett olaruk kendisini gajiran fonksiyona pénderebilmektedir 7.2 FONKSIYONLARIN GERI DONUS DEGERLERI (Return Value) IOCKUaGOhR 3 3 Bir fonksiyonun galigmast sonunda enu gajirun fonksivona doniigtinde génder- digi degere geri doniis degeri (return value? denir. Geri déniig degerl, bir degigkene atanabilir ya da dogrudan aritmetik ijlemlerde allamlabilir. Orneitin: x = fonk(; bicimindeki bir ifadede Gnce fonk isimli fanksiyon galistrilrr; galigma sonunda elde edilen geri déndg degeri x desigkenine atamr. Cde fonksiyanlar, geri dénitg degerlerine sahip obnalart nedeniyle "sag taraf deer’ (RValve)" olarak kullanila- bilisler, fikar nesne géstermediklerinden cof sara/ deger’ (LValue) olarak kullans- lamazlar. Ornegin: fonkQ) = a; sibi bir ifade gegersizdir, x = fonkQ) + bz Bu dmnekre de tince fonkisimii fonksiyon galigtnitr, daha sonra geri diinils de- Beri bile toplanir ve en somunda da x degigkenine atamr. Peki, fonksiyonlasin je- Fi déniiy defterleti hang amaglarla Kullambyor dersiniz? 1) Bazi fonksiyonlar bit tek deer elie etmek amacyyla tasarlanmiglardit, Eide ettikleri bu deferler! de kendilerini gagiran fonksiyonlara geri dimiiy degeri bigi minde iletirler, Parumetre olarak aldygs bir sayinin karekékiinii bulan set fonk siyonunus buna Gmek verebilitiz 8 = sqrt(x); sqrt (onksiyenunun amecr x sayisinin karckkiind bubmaker. Sonug geri dé- niig deferi bigiminde a degiskenine atonmakiadr. 2) Bazi fonksiyonlann geti déiniig deserleri yapilan islemin bagarss hakkincla bilgi verir. Yani bu tar fonksiyonlarin geti d&ntig degerler! test amacryla kullanl- maktudit, Geri déntig degeri “Isle bagaree ofmauy meacdur yo da neder basartse at mustir?..” gibi sarulara yantt verit. Onegin: p = malloc(size); ifadesiple hellekte size byte uzunlugunda hir blok tehsis etmek isteyen prog: rama bu islemnin bagarth bir biginle yerine getirilip getirilinedigini de test etmek oSOhn @ Gj bojler Fonkslyonlar zorundadir. Hemen arkasindan p degiskeninin aldigr deger' konteal edecek ve ig: Jemin bagaris: hakkinda bir karara varwcalctis. 3) Kimi fonksiyonlar hem belli bic amaer gergeklestiirler hem de buna ek ola rak amaglannt tamamlayan bir geri dnilg defer ficecister, Onegin: © = printf(*Merhaba\n"); print fonksiyonu ckrana merhaba yazan yazmak igin kullanutmigtee. Ancak ckrana yazdigr karakter sayrsint da geri déniig degeri olarak vermekredis, 4) Bazen geri déniis degeclerine hig ihtiyag duyulinaz, Omogin, yalnuzea ekra- a1 silme amaciyla tasarlanmig olan bir fonksiyonun herhangi bir geri dGniis deter rine sahip olmast gereksizdir, elrscrO; clrser fonksiyonu yalmzca ckran: siler; béyle bir fonksiyonun geri dbniis de- Serine gereksiniml yoktur. Fonksiyonlarin geri déniig deperlerinin de tiirleri sz konusudur:. Fonksiyonlarin geci diintig degerleri herhangi bir tiirden olabilir, Geri déniig degerlerinin ixleri fonksiyonlarn tarumlanmas: sirasinda belirtilir. 7.3 FONKSLYONLARIN TANIMLANMASI Kendi yazdigimu fonksiyonlar igin tammlama (definition) terimini kullanyoruz. (Tanimlama teriminin nesne yaratan bir bildirim oldugumu anumsayimz, Fonksi- yonlar da bellekte yer kaplarlar degil mi?) Cde fonksiyon tanimlama isleminin ge- nl bigimi sByledie. [Geri Duns Deflerinin Turd] (CParametrelerd) Yukartdaki gasterimde <.....2 arasinda belirtilen ifadeler zoruntu olarak bulun- mast gerekenleri; [...] arasindakiler de buhinmus: zorunlu olmayan, istefe bagl (optional) ifadeleri postermekredir. 95 A‘dan Z'ye C Kilavazu ‘Tanumlanan fonksiyonlar en az bir blok igetirler, Omesin: float tonk© € + | Fonksiyonun ana blogu + Burudun fonk isimli fonsiyonunun geri dénig degerinin float olduganu ve patametre almachpint gortiyoruz: Bir fonksiyonun parametresi ve/veya geri diniig degeri ulmayabilir, Parametresie fonksiyonlarda fonksiyon parantezler igine ya big hirgey yarilmaz ya da voidanabtur séxcdigl ywailtr. Omegin: float al(void) thoat a10 « € > - y , Yukandaki iki tancmlatna bigimi de 81 forksiyenunn parametresiz oldupur anlatmaktadir, dolayisiyha-egcegerdir. Geri déniiy degerine ihtiyag duyulmachg: durumlarde da geri déniis degerinin tiirdi yerine yine void anahtar séizciigi: kullanthr, Onnejtin: void x1tvoid) € oCl@rguiol x1 fonksiyonu geri doniiy dederine de parametreye de sahip degildir. Bu durumda, fonksiyon tanmlsmulunnda kullandipensz void analtar s6zcti- finn ii iglevi-vardr: 1) Fonksiyon parantedlerinin igerisine ywailrsa fonksiyontin parametre ald nt belirsr. SFrqguol ain sampleC eed samleQ; ———l ; ; = jj gS Fonksiyontar ancak tanumlanmig fonksiyonlarn igcrisinde gagilabilirler. Aga- sadaki drnegi inceleyiniz. maing> t int a = 100, b= 200; printf('a = %d b= %d\n", a, b); printf(*merhaba\n"); /* Hatal.. Burada fanksiyen gagrilamaz */ tonkO t int x= 10, ¥ = 20; printt(’x = td y = td\n, x, ¥ 07 “ Burada printf, main ve fonk isimli fonksiyonlarin iginde dogru bigimde gap- almatic. Ancak iki fonksiyonun arasinda higbiritin iginde olmayucak bigimde agrimis olan printt (merhaba\n") ; gegersiedir. Fonksiyontar Cagwean fonksiyon ile gijgrilan fonksiyonum her ikisi de aynt amug kod igerisin- de bulunmak zorunda dejildir, Cajtean fonksiyen ile gagnlan fonksiyon farkh amg kodlar igerisinde de bulunabilir (bir projeyi olusturan amag kedlara kesaca modill denir! . Ciinkii derleme sirasinda bir fonksiyonun gagtildsgint goren derle- viel. amag kod icerisine (.obj) yalnizca g2frilan fonksiyomuns acini ve gageilag bi- cimini (short, near, far, ditect, indirect) yarmaktadir. Cagiran fonksiyon ile gagrilan fonksiyon arasinda baglants kurma islemi, baie lama ajamasinda, baglayscs program (linker) turafindan yapile. Bu nedenle tenumladginuz bir fonksiyonan iginde, olmayan bir fonksiyony ¢a- jirsante bile, derleme agamasinda bir hata oluymaz. Hata, baglama aguenasinds, baglayrcinn gailan fonksiyonu bulamamast bigiminde ortaya gikar. Bir deneme yupabilirsiniz. Asapidale) programs énee yalnuzca derleyin, dhn sonra ise bapls- maya align. Hinclude maine) 4 xxx) 7 Ne giriiyorsuntz? Hata kimin tarafindan ve ne bigimde verily? Bundun biyle kargilagtypinz haualarm derleme zamanina mi (compile time) yoksa haglams zamanina mt (link time) iligkin oldugunu tespit etmeye galgmal- sine Onceld baliande de anianldig gibi, main fonksiyonu programin baglangig noktasin. belirtmektedit: Progtamin galigmaya bagladgts fonksiyon almasi digin- da main fonksiyontinun diger fonksivyenlardan hichir fark yoktur: main fanksiyo- nunun icrast bitince program da bitmis olur. Aynea, bir C programinin galisabil- medi igin mutliku bir main fonksivoouna subipy clmast gerekir Cprogramlaruun galisabilmesi igin mutlaka main fonksiyonun bulunmast ge- rckir, main fonksiyonu yoksa hata baglama agamasinda, baglayic1 progeam tara findan bildirilecektir. ooISFrGQioi xUoGonn 7.5 STANDART C FONKSIYONLARL Standart C fonksiyonlan, C derleyicileriné yazanlar tarafindan ilk elder yailmus clan ve derleyiei pakedlerinin igerisinde 2uten bulunan fonksiyonlardir. Bu fork- siyontarin her sistemde olmast “taginabilirlike gerei” garanti alta abnmastir Standart C fonksiyonlannin standart olmalart int fonk(void) t int a = 100, b = 200; return a + b; (* geri diniis degeri a + b, yani 300 */ } void maintvoid) int 3; a = fonk0; printéC'a = ad\o", a); fonkisimli fonksivondaki return anabtar séeciipti, hem fonksiyonu sonlands rir hem de geti démiig degerini olugturur return anahtar sdzciiftiniin kullanilmast zorunlu degildit. Eger return anah- tur sizciigi yoksa fonksiyon, ana blog bitince kendiliginden sonlarvr. rerurn anabtar sSzcdtiniin fonkslyon blogunun sonunda olmast gibi bir zoruntulugan do olmadigua belirtelim, Bitkeag Sek dahis vermek istiyoruz’ return (a+ b * ¢); / parantez kullanabilirsiniz, size kalmus */ return 100; P deffiskenle geri dénmek gerekmiyor "/ return getkbO; #* dace getkb fonksiyonu galignnlir”/ Son dimek bivus ilging gélebilir size. Fonksiyonun geri déntiy degerd, baska bir fonksiyonun geti dint degeridir. Bir durumda dace ilgili fonksiyon gerkb() ig degeri ile geri dotumektedir fonksiyonunun geri di 101 A’dan Z'ye C Kilaverru Geel déniig degerine subip olmayan fonksiyonlarda return yalnz bayins kul laniimaldsr. void x10) « return; /* fonksiyanun geri déniis deqeri yok */ + return bu dmekte yalmizca fonksiyonu sonlandsmak igin kullarsmagur, 7.8 FONKSIYON PARAMETRELERININ TANIMLANMASI Patametreler (ya da argiimunlar) fonksiyonlaiin kendilerini gajitan forksivontar dan sldiklan girdilerdir. Bir fonksiyonun sahip oldugu parametre sayist, bunlastt isimleri ve térleri pibi bilgiler, fonksiyonun tarumlanmas) strasinda derleyiciye bil dirilir, de patamenelerin tamimlanmasinda kullanilan 2 yéotem vardir, Bunlardan birine eski bigim{ald style), digerine ise yen bi¢tm (new style) diyoruy, Eski bigim -isminden de anlastlacai) gibi- Cnin ANS! tarafindan standardize edildigi 83 yelina kadar yoRun olarak kullanhyordu. Simdilerde ise programeslar hep ye ni bigimi rercih ediyrlar SFrgqQuoa_xu.Gcomnn 1) Eski Bigim (Old style) Bu bicimde, dnce fonksiyon parantezinin igerisine parametre degigkenlerinin isimleri aralarina virgial (,) konularak yazthr; daha sonra lonksiyonian ana blogun- dan dince bu deiskenlerin bildirileri yapilu. [Geri Danis Degerinin Tir] ({Parametre Degigkenleri]) o\ Fonksiyontar > Omegin: int topla ¢a, b) int a, b; ¢ return @ + bz + Burada topta fonksiyonu ave bisimli iki tune int tiiriinden pammetre abmig- ue, float px(x, float x; int yz { 3 Bu Smekte ise px fonksiyonu 2 parametre almaktadir. x parametre degiskent float, y parametre deiskent ise int tiirtindendir. 2) Yeni Bigim (Modern style) Yeni bicim hem yer bakamindan daha ekonemiletir ham de duba okunabilirdir Biz de kitabumizdaki biviin Gmeklerde hep yeni bigimi kullanacajyz. Bu bigimde parametce degiskenlerinin tint ve isimleri fonksiyon parantezinden sonra birlk te yunlirlar | ({ , Tir ,...]) 103 ooSrGQiol b dewiskeninin bildivimi hatalidt. Bildirim agagidaki bigimde olmalidur: int fonkCint a, int b> t 7.9 KLAVYEDEN KARAKTER ALAN C FONKSIYONLARI Sistemlerin cojfunda klavyeden karakter alan fig tir € fonksiyonu vardir. Bu fonk- siyonlann biri tam olarak standart; ancak diger ikisi, sistemlerin gogunda bu {unmasina kargin tam anlamtyla standart degildir Fonkelyantar 1) int getchar(void) getchar bie standart © fonksiyonudus, Geri démig deer! klavyeden alanan ka- rakterin ASCH! tablosuadaki numarasin’ gisteren ft Tininden bir sayedir getchar fonksiyonu ENTER tusuna itivag duyar. finclude main() t char ch; ch = getchart); print!*Karakter olarak ch = Yoo, ASCIL nymarast ch = %d\n", chy chi}, 1 Bu dmekte klavyeden dhman bir tugun kerakter ve sayisal kargilelan krana Jandinhivor. getehar fonksiyonunun geri dinity deiferinin basilan wuyun ASCH earghigans pasteren bir tamsayt oklupunu untmayuma, Bu fonksiyan tam olarak standardize edilmigtir; dolayssiyla standart C fonksiyonudur. Not: aetchar détleyicilerin gogunda stdio.h dosyasinda bir makro olarak ta- ramlanvmstr: Makrolar hokkinda lerideki békirnlende aysss bilgi bulacabsrns 2) int getch(void) ‘Tapks getehar gibi bu feaksivoo da basilan tagun ASCH! karaktce mumarastyla geri diner, getchar fonksiyonundan tek fark ENTER ruguna, gereksinim diyma- masdir. Yani tuga basar basmax ighem gortiry bastasmiz tig tee ekranda gérin- mez, Bu fonksiyon tam olarak standardize edilmemigti. Dolayistyla standart forksiyonudur, diverniyorur. Yukuridaki Senck program: getchar yevine getieh yazarak tekrar galiurmays deneyiniz, getch fonksiyonin Gvellikle, "as beifeome yur da anaylama” amactyla kullantlmaktadie, Omnegin: printfCDevam etmek igin bir tusa basiniz,.-\""2; getch(); Burada basilan tuytth programe tarafindan bit énemi yoktur, Bu nedenle geri déavis defieri de kullurnimamugur, A’dan Z'yo € Kilavuru 3) int getche(void) Bu fonksiyon da bastlan tugun ASCTT numarastyla geri dénet ve ENTER tust- na gereksinim duymuaz. Ancuk, getch fooksiyonundan tek farks bastlan cugun ek- randa goriinmesidir, printfc"(E vet mi (Hayter m2. “97 ch = getche(); (getche, hrgehzce get~char-echo sézcliklerinden gelmektedir) 7.10 EKRANA KARAKTER YAZAN C FONKSIYONLARI sak- ektana karaktet yazan iki fonksi- Sistemlerde -printt fonksiyonunu saym yona rastlanur: putchar ve putch, 1) int putchar (int ch) putchar standart bir © fonksiyenudur; dolayisiyla biitiin sistemlerde bulun- mak zorundackr. Parametcesi olan karakteri ekranda imlecin (cursor) bulunduy yore yazar. Ornetin: char ch; ch = getchart); putchardch); burada getchar ile klavyeden alinan karakter putehar ile cekrar ckrana yazdinlyor. putchar fonksiyonu: oolSrgila £ ? $5) Gagan fonksiyon ile gugrilan fonksiyon arasindaki baglanty: neden dee- Jejiel kurmuyee da bu iy baplayicr tarafindan yupihyor? 5) Caguran fonksiyon ile gainlan fonksiyon aynt amag desyada aliak zorun- da dejildir. DOS, UNIX ye WINDOWS alunda bizden fazla ama dosya C.0bj) tek bir galrgabilir program (.exe) elde ctinek amacryla birlike baglanabilir. $6) Tanimlamast yaprimamis bir fonksiyon gagnidiginda hata necen baa agamasinda, baglaytct tarafindan tespit ediliyor? C6) Cink derleyicinin girevi lonksiyonun ear olup olmadigant aragurmak de- gildie. Bu isi baplayser yopmaktadir, 4. soruda da belietifimiz gibi bis'den fica kaynake kod ayes ayer derlenebilir WIOD"* AY OIBIDDOMWAWMMA 2 Us JIOLS VMYIVN7aC@ | ere NESNELERIN FAALiYET ALANLARI VE OMURLERi esnelerin birtakum dzelliklesi Gnceki béliimletde incclenmigti. Simdi stra N *faolivet alani (scope) ve imix (durntion)” Geellikderine geldi. Fualiyet alan, bir nesnenin taninabildigi “program arulylens", Gro ise faaliyer gisterdifi “zeman araligent” belirtmektedir, Bu iki dzelligin de C dgrencileri tarafindan gok iyi anla- silmast gevekir, Fakat maalesef C Sprencilerinin goju bu konulari yeterli olmayan bilpilerle gegerler; bunun sonucunda da sonraki konulan anlamalea. zorlunalar. Bu bokimi okuduktun sonra agagidaki sorulars yanutayabilmeniz gerekir: 1) Code kag titel faaliyet alan vardir? 2) Faaliyet alanlarina gore depigkenler kag gruba ayriiclar? 3) Aymn isitnli degigkenlerin tanimlanmasina iliskin kural nasildir? 4) Ayn isimli fakat Farkh faaliyet alantarma sahip degiskenlere crigime kurals pasildir? 5) Cde parametre aletartm kuvali naseldir? 6) Grniirleri bakimmdan degiskenler kag grubs aynililar? 7) Ukdeger verilmemis degiskenlerin igerisindeki degerler haklunda ne sdiyle- nebilir? 8.1 FAALIYET ALANI (Scope) Fanliyet slant, bir degiskenin mriiné stirdiirdiigit ve tanmnabildigi program sra- liidie. Degiglenlerin fanliyet alanlan, onlartn program igerisindeki tanumianma yerleriyleiligkilidir. Faaliyet alanlarini tig grupta toplayabiliriz 1) Blok Faaliyet Alani (Block scope): Yulnizca bit blok igerisinde tanmma aralgicir. (Kime parantezlerinin arasindaki bolgeye blok denildigini animsayt- nz) (PCGUOKU-.GCoOnnr A’dan Z'ye C Kilavuzu 2) Fonksiyon Faaliyet Alam (Funetion scope): Yalnwzea bir fonksiyonun her yerinde taninma aralyidis. 3) Dosya Fanliyet Alant (File scope): Tim dosya iginde, yani fonksiyenlarn hepsi igerisinde tama araligidir Degigkenleri de fauliyet alanlarma gore 3 ballime ayirabiliriz. 1) Yerel depigkenter (local variables) 2) Global degiskenler (gloubal variables) 3) Parametre depiiskenleri (formal parameters) Simdi bunlars tek tek inceleyeceytiz: 8.2 YEREL DEGISKENLER (Local Variables) Bloklann baslarinda tanmlanan degiskenlere verel deiskenler denit. Verel dewig: kenler blok fauliyet slant kurilina uyarlar; yeni yalmzca tanunlandiklan bloke igin- de taninubilir ve erisilebilisler Onegin: a degiskenininy bdegiskeninin | taaiiyet alant faaliyet alant Barada ave binin her ikisi de yerel depiskendir. Giinkii bloke baslarinda t= fomlanmglardis. a dejtiskerinin faaliyet alanuun b depiskeninin faaliyet alarundan daha biyiik olduguns goriiyorsumuz, a depikeeninin tanmlandhfy blok, b dejiske- ninin tanimlandigi blog kapsiyor, degil mi? © halde syle diyebiliriz: ci degiskenin aycu faaliyet alant grubuna ait olmast (blok, fonksiyon ya da dosya) faaliyer alunlarman cimamen birbiriyle aynt oldugu anlamina gelmez, Blok, fonksiyon ve dosya fualiyet alanlart bir genellemedir.

You might also like