{"id":172,"date":"2014-11-07T19:08:24","date_gmt":"2014-11-07T17:08:24","guid":{"rendered":"http:\/\/ozenozkaya.com\/blog\/?p=172"},"modified":"2016-06-09T09:17:49","modified_gmt":"2016-06-09T06:17:49","slug":"gomulu-sistemler-13-gomulu-cye-giris-merhaba-dunya","status":"publish","type":"post","link":"http:\/\/ozenozkaya.com\/blog\/?p=172","title":{"rendered":"G\u00f6m\u00fcl\u00fc C &#8211; 2 : G\u00f6m\u00fcl\u00fc C&#8217;ye Giri\u015f : Merhaba d\u00fcnya"},"content":{"rendered":"<p>Yol haritam\u0131z malumunuz, karanl\u0131kta klavuzumuz. Efendim ne diyor harita, sanatsal programlama pratikleri diyor. Peki\u00a0nerden ba\u015flayaca\u011f\u0131z? C dilinden ba\u015flayaca\u011f\u0131z. C dili ile ilgili bir \u00e7ok yorum yap\u0131l\u0131r; \u00a0orta seviye bir dil, \u00a0hem makinaya, hem insana yak\u0131n gibi&#8230; Hepsi geyik muhabbeti! \u015eu y\u0131llarda,\u00a0C dili hala varsa ve hala bu kadar pop\u00fclerse bunun sebebi dilin g\u00f6m\u00fcl\u00fc sistemlerle olan \u015fahane uyumudur. Mevzuya a\u015fk\u0131n bu penceresinden bakal\u0131m. G\u00f6m\u00fcl\u00fc C, en nihayetinde \u00f6z\u00fcnde bildi\u011fimiz C dili. O sebeple bu k\u0131s\u0131m aman aman g\u00f6m\u00fcl\u00fc yaz\u0131l\u0131ma \u00f6zg\u00fc de\u011fil, ama merhaba d\u00fcnya kodunu g\u00f6m\u00fcl\u00fc sistemci kafas\u0131ndan pestil edece\u011fiz. S\u0131ksak ne kadar suyu \u00e7\u0131kar? G\u00f6rece\u011fiz&#8230;<\/p>\n<p>C dili malumunuz,\u00a0 <b>ISO\/IEC<\/b> 9899 standardlar\u0131 ile tan\u0131mlanm\u0131\u015f bir ifade bi\u00e7imi. Bir dil bir insan derler ya, o misal bir dil \ud83d\ude42 Kendisi diller familyas\u0131nda,&#8221;yap\u0131sal&#8221; diller s\u0131n\u0131f\u0131nda yer al\u0131yor. Yani ne diyor? Benim tasar\u0131m\u0131m yap\u0131lar (struct, enum, union) \u00fczerine dayan\u0131r diyor. Benimle konu\u015facaksan, yap\u0131lar \u00fczerinden konu\u015fsan sen karl\u0131 \u00e7\u0131kars\u0131n diyor. \u0130yi de neymi\u015f bu yap\u0131lar? Struct, enum, union dedin, de ne bunlar? Hemen d\u00f6nd\u00fck yol haritas\u0131na, ne yaz\u0131yordu bilinene referans ver k\u0131ymetliyi anlat. O zaman bu yaz\u0131y\u0131 okumadan \u00f6nce C dilini bir yerden tan\u0131m\u0131\u015f olman\u0131z gerekiyor. \u00dc\u00e7 be\u015f \u00f6rnek kodu \u00e7al\u0131\u015ft\u0131rman\u0131z gerekiyor. Yani dostlar, dost ac\u0131 s\u00f6yler, struct, enum, union nedir bilmeniz gerekiyor ki sonraki ad\u0131m olarak i\u015fin\u00a0felsefesini konu\u015fal\u0131m. \u00c7ok da tatava yapmayaca\u011f\u0131m, inan\u0131yorum ki bilmeyen de gitti okudu \u00f6\u011frendi geldi. Bilmeyen ama \u00f6\u011frenmek isteyenleri de duyar gibiyim; iyi de kaynak \u00f6nermedik? Kitap olarak: <a href=\"http:\/\/www.dr.com.tr\/kitap\/c-ve-c-deitel-deitel\/kolektif\/egitim-basvuru\/bilgisayar\/urunno=0000000168583\" target=\"_blank\">Deitel&amp;Deitel<\/a>. Online kaynak olsun ve T\u00fcrk\u00e7e olsun: ahanda <a href=\"http:\/\/www.cagataycebi.com\/programming\/\" target=\"_blank\">burada<\/a>. \u00a0Online olsun \u0130ngilizce olsun eyvallah o da <a href=\"http:\/\/www.tutorialspoint.com\/cprogramming\/\" target=\"_blank\">burada<\/a>. \u015eimdi heyecan\u0131ma yenik d\u00fc\u015f\u00fcp hemen struct, enum, union dedim ama onlardan daha \u00f6nce \u00e7ok \u00f6nemli sorular var. \u0130bretlerle dolu &#8220;Merhaba D\u00fcnya&#8221; var. <strong>Ezber bozan Merhaba D\u00fcnya!<\/strong><\/p>\n<p>Yazd\u0131\u011f\u0131n\u0131z kodlar\u0131 derlemek i\u00e7in program olarak, dev C++&#8217;\u0131, codeblocks&#8217;u, eclipse cdt&#8217;yi \u00f6nerebilirim. Sadistseniz, komut sat\u0131r\u0131ndan Gcc ile de derleme yapabilirsiniz, ki \u00e7ok keyiflidir, bilen bilir. \ud83d\ude42<\/p>\n<p>\u015eimdi, bir C kitab\u0131n\u0131n\u00a0gitti\u011fi s\u0131ra ile mevzunun inceliklerini konu\u015faca\u011f\u0131z. Anl\u0131 \u015fanl\u0131, Sanatsal G\u00f6m\u00fcl\u00fc C ba\u015fl\u0131yor!<\/p>\n<h2>SANATSAL G\u00d6M\u00dcL\u00dc C!<\/h2>\n<p><em>Yanl\u0131\u015f Bildiklerimizi Bir Kenara Koyabilmek, \u00d6\u011frenmeye A\u00e7\u0131k Olmak&#8230;<\/em><\/p>\n<p>C diliyle yaz\u0131lan en basit kod diye tan\u0131t\u0131lan merhaba d\u00fcnya kodu ile ba\u015flayal\u0131m. Dakika bir, gol bir olsun. Acaba bin defa g\u00f6rd\u00fc\u011f\u00fcm\u00fcz merhaba d\u00fcnya kodundan ne kadar ibret \u00e7\u0131karabiliriz ki? \u00dc\u00e7 be\u015f sat\u0131r kod. E hadi bakal\u0131m, suyunu s\u0131kaca\u011f\u0131z demi\u015ftik. Kodun suyunu s\u0131kal\u0131m neler neler \u00e7\u0131kacak, g\u00f6relim \ud83d\ude42<\/p>\n<pre class=\"lang:c decode:true\">#include &lt;stdio.h&gt;\r\n\r\nint main()\r\n{\r\n   \/* c ile merhaba d\u00fcnya *\/\r\n   printf(\"Hello, World! n\");\r\n   \r\n   return 0;\r\n}<\/pre>\n<p>\u015eimdi bir kere, i\u015f yapan, bir \u015fey d\u00f6nd\u00fcren en basit C kodu bu mu? Merhaba d\u00fcnya hakikaten temelin temeli mi? Hi\u00e7 alakas\u0131 yok. Ahanda size, Bah\u00e7eli&#8217;ye yard\u0131mc\u0131 i\u015f yapan \u00e7ok daha basit C kodu. Koda hi\u00e7 bir \u015fey eklemeye gerek yok, derleyicide aynen \u00e7al\u0131\u015f\u0131r. Bir \u015fey eksik diye d\u00fc\u015f\u00fcnmeyin.<\/p>\n<pre class=\"lang:c decode:true\">int main()\r\n{  \r\n   return (29+11);\r\n}<\/pre>\n<p>Ee ne farketti ki? \u00c7ok \u015fey farketti. Bir kere &lt;stdio.h&gt; k\u00fct\u00fcphanesini kullanmad\u0131k. &#8220;Yahu o, olmazsa olmaz de\u011fil miydi ya?&#8221;. Hay\u0131r efendim de\u011fildi.\u00a0&lt;stdio.h&gt; yaln\u0131zca ad\u0131 \u00fcst\u00fcnde standart giri\u015f \u00e7\u0131k\u0131\u015f (i\/o) i\u015fleri yap\u0131lacaksa kullan\u0131l\u0131r. Merhaba d\u00fcnya kodunda printf fonksiyonu \u00e7a\u011f\u0131r\u0131ld\u0131\u011f\u0131ndan elimiz kolumuz ba\u011fland\u0131, &lt;stdio.h&gt; k\u00fct\u00fcphanesini g\u00f6reve \u00e7a\u011f\u0131rd\u0131k. Peki niye &lt;&gt; ile \u00e7a\u011f\u0131rd\u0131k, bazen &#8220;selam.h&#8221; gibi de \u00e7a\u011f\u0131r\u0131l\u0131yor bunun hikmeti nedir? Derleyici, \u00e7a\u011f\u0131r\u0131lacak baz\u0131 header dosyalar\u0131n\u0131n konumunu ezbere bilir. Derleyicinizin &#8220;include directories&#8221; ayar\u0131nda bunlar\u0131 g\u00f6rebilirsiniz. Deleyicinin yerini ezbere bildi\u011fi, uzak yerlerde de bulunabilen headerlar <strong>#include &lt;selam.h&gt;<\/strong> \u015feklinde \u00e7a\u011f\u0131r\u0131l\u0131r. E\u011fer selam.h dosyas\u0131, bu header&#8217;\u0131 \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z selam.c dosyas\u0131 ile ayn\u0131 dizinde(klas\u00f6rde) ise onu\u00a0<strong>#include &#8220;selam.h&#8221;\u00a0<\/strong>ile \u00e7a\u011f\u0131r\u0131r\u0131z. Peki #include nas\u0131l bi\u015fi? C dilinde &#8220;#&#8221; ile ba\u015flayan komutlar preprocessor komutlar\u0131 diye adland\u0131r\u0131l\u0131r ve yaln\u0131zca derleme zaman\u0131nda \u00e7al\u0131\u015f\u0131r. Yani biz selam.c fonksiyonunda selam.h&#8217;\u0131 include edince derleyici derleme esnas\u0131nda gider _selam.c diye ge\u00e7ici bir dosya olu\u015fturur, selam.h&#8217;da ne var ne yoksa gider selam.c&#8217;nin tepesine koyarak toplam i\u00e7eri\u011fi _selam.c&#8217;de saklar.<\/p>\n<p>\u0130yi de <strong>int<\/strong> veri tipi var kodda, o nerden geliyor? Ahanda ibret detected, int veri tipi C dilinin standard tan\u0131mlamalar\u0131nda bulunan bir veri tipi oldu\u011funadan, derleyici adam olacak, onu k\u00fct\u00fcphane olmaks\u0131z\u0131n tan\u0131yacak.<\/p>\n<p>Ama <strong>main<\/strong> olmazsa olmaz dmi? Hi\u00e7 alakas\u0131 yok. En sevmedi\u011fim genellemelerden biri de budur. Ezberdir, k\u00f6t\u00fcd\u00fcr, kemdir. \u00d6rne\u011fin ARM Cortex mimarisinde kod her zaman main&#8217;den de\u011fil ResetInterruptHandler&#8217;dan ba\u015flar. \u0130nanmazs\u0131n\u0131z, bu platformda main, reset interrupt handler taraf\u0131ndan herhangi bir fonksiyon gibi \u00e7a\u011f\u0131r\u0131l\u0131r. Nas\u0131l yani <strong>main\u00a0<\/strong>demesek <strong>ecmain\u00a0<\/strong>desek kod <strong>ecmain\u00a0<\/strong>fonksiyonuna m\u0131 gidecek? Evet. Ne derseniz ona gider. Ama al\u0131\u015fanlar\u0131 hayal k\u0131r\u0131kl\u0131\u011f\u0131na u\u011fratmamak ad\u0131na yine yalandan bir <strong>main<\/strong> \u00e7a\u011f\u0131r\u0131l\u0131r. Hmmm. Belki bu birilerini \u015fa\u015f\u0131rtm\u0131\u015ft\u0131r. Hemen ayd\u0131nlanm\u0131\u015f hissetmemek laz\u0131m\u00a0\u00e7\u00fcnk\u00fc mevzu biraz daha derin. Main fonksiyonu asl\u0131nda <strong>linker\u00a0<\/strong>day\u0131n\u0131n, kodun ba\u015flang\u0131\u00e7 noktas\u0131 olarak adresledi\u011fi bir fonksiyon. Main her \u015feyin ba\u015flang\u0131\u00e7 noktas\u0131 olsa, i\u015fletim sistemi nas\u0131l \u00e7al\u0131\u015f\u0131rd\u0131 \ud83d\ude42 Siz kodu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, onu \u00e7al\u0131\u015ft\u0131racak sistemin \u00e7al\u0131\u015fmas\u0131 gerekiyor. Demi\u015fler ki &#8220;aga, biz bu dili bulduk, elemanlar da kod yazs\u0131n da nerden ba\u015flayacak olm bu kod?&#8221; Biri demi\u015f ki &#8220;ilk sat\u0131rdan ba\u015flas\u0131n i\u015fte&#8221;, \u00f6b\u00fcr\u00fc demi\u015f &#8220;yok aga \u00f6n bilgiler laz\u0131m bir sabit\u00a0bir fonksiyon ad\u0131 belirleyelim, derleyici gitsin en az\u0131ndan o fonksiyonu aras\u0131n onun adresini bulsun bizim i\u015fletim sistemi de gitsin program\u0131 da ordan ba\u015flats\u0131n nas\u0131l ama&#8221;? Ve akla yatm\u0131\u015f tamam demi\u015fler. Biz bi linker yazsak, windows \u00fczerinde \u00e7al\u0131\u015fsa ne yazmam\u0131z gerekirdi? Window&#8217;s bunu nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131rd\u0131? Mevzuyu anlamam\u0131z\u0131 sa\u011flayan soru bu? C program\u0131 nas\u0131l \u00e7al\u0131\u015f\u0131r de\u011fil. Bu ters y\u00f6nden hedefe varmam\u0131z\u0131 sa\u011flayacak. Compiler gitti bizim dosyalar\u0131 derledi biz de birle\u015ftirerek\u00a0\u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirece\u011fiz. Ne yapaca\u011f\u0131z? Diyece\u011fiz ki; misal bizim program &#8220;<strong>bigbang<\/strong>&#8221; fonksiyonundan ba\u015flas\u0131n. Ben bir dil yazsam her \u015fey bigbang ile ba\u015flard\u0131 \u00e7\u00fcnk\u00fc. Neyse bizim c dosyalar\u0131nda kullan\u0131lan sembolleri, ba\u015fka dosyalarda da aray\u0131p bulup birle\u015ftirdik. Adam d\u00fczg\u00fcn yazd\u0131 diye varsay\u0131m yap\u0131yoruz ki bigbang fonksiyonu da yazm\u0131\u015f bir tane. S\u00fcper! \u0130\u015fletim sistemi ne yapacak? Gidecek bakacak; bu program ne kadar ram kullanacaksa, o kadar yeri ay\u0131racak ayarlayacak. Sembollere adresler atayacak, kendi task scheduler&#8217;\u0131n\u0131n stack&#8217;ini filan ayarlay\u0131p bizim program\u0131 &#8220;bigbang&#8221; fonksiyonunun bellekteki adresinden ba\u015flatacak. Sonra da malumunuz bizim merhaba d\u00fcnya kodu \u00e7al\u0131\u015facak. Vay beee. Ne yolculuk g\u00f6r\u00fcyor musunuz? Bunun da \u00f6ncesi var, bilgisayar nas\u0131l aya\u011fa kalk\u0131yor filan? Ama onlar sonran\u0131n mevzusu. Almam\u0131z gereken <strong>ibret<\/strong> \u015fu: main de neticede bir fonksiyon&#8230;\u00a0Linker, bizim elemanlar\u0131n ald\u0131\u011f\u0131 karar y\u00fcz\u00fcnden onu ar\u0131yor. Aras\u0131n dursun madem. \u015eimdi ibretlere devam.<\/p>\n<p>&#8220;<strong>int main()<\/strong>&#8221; yazd\u0131k. Bu ne demek; &#8220;<strong>int main(void)<\/strong>&#8221; demek asl\u0131nda ama biz k\u0131sa olsun diye \u00f6yle yazd\u0131k dmi? <strong>De\u011fil<\/strong>. \u0130kisi aras\u0131nda ince bir fark var. Buna da gelece\u011fiz ama, \u00f6nce s\u0131rayla gidelim. Bir kere, fonksiyonu soldan sa\u011fa inceleyelim. <strong>int<\/strong> d\u00f6nd\u00fcrmesi ne demek fonksiyonun? \u015eu demektir ki;\u00a0fonksiyon bir makine gibi \u00e7al\u0131\u015f\u0131rsa, i\u015fini bitirince bize bir say\u0131 verecek demektir. \u0130yi de bizim program \u00e7al\u0131\u015ft\u0131 bitti 0(s\u0131f\u0131r) d\u00f6nd\u00fcrd\u00fc, bu 0(s\u0131f\u0131r) kime, niye gitti, ne anlatmaya \u00e7al\u0131\u015ft\u0131? Burada\u00a0<strong>main\u00a0<\/strong>\u00f6zel bir fonksiyon etiketi oldu\u011fundan verdi\u011fi mesaj i\u015fletim sistemine gider. Yani bizim Merhaba d\u00fcnya, do\u011fru d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131p i\u015fini bitirirse, bir yerde tak\u0131lmazsa i\u015fletim sistemine 0(s\u0131f\u0131r) say\u0131s\u0131n\u0131 g\u00f6nderir. Ama niye s\u0131f\u0131r? \u00c7\u00fcnk\u00fc bir \u00e7ok hata \u00e7\u0131kabilir, ama program\u0131n hatas\u0131z tamamlanma ihtimali bir tanedir. Biz her bir hataya s\u0131f\u0131rdan farkl\u0131 bir say\u0131 de\u011feri atarsak, hatas\u0131zl\u0131\u011fa da tek bir \u015fekilde(tek bir sebeple) ger\u00e7ekle\u015fece\u011finden s\u0131f\u0131r\u00a0de\u011ferini atarsak ne olur? \u00c7i\u00e7ek olur \u00e7i\u00e7ek. Bizim programda diyelim bellek ayr\u0131lamad\u0131&#8230; O\u00a0hataya 1 desek, printf ekrana bir \u015fey yazamad\u0131; o hata 2 desek, ba\u015fkas\u0131na 3 desek filan t\u00fcm hatalar\u0131 indeksleyebiliriz. Hata\u00a0kodunun 0(s\u0131f\u0131r) olmas\u0131, hata yok demektir. O nedenle 0(s\u0131f\u0131r) d\u00f6nd\u00fcr\u00fcl\u00fcr. Hata kodu da say\u0131 olaca\u011f\u0131ndan dolay\u0131 da main int d\u00f6nd\u00fcr\u00fcr, ki hakk\u0131d\u0131r yapar. \u00a0\u00d6nceden main&#8217;in ad\u0131 niye main onu anlatm\u0131\u015ft\u0131k.\u015eimdi \u015fu &#8220;()&#8221; vs &#8220;(void)&#8221; fark\u0131na gelelim. Bir fonksiyon parametre olarak &#8220;()&#8221; al\u0131yorsa, bu \u015fu demektir: sen parametre olarak ne verirsen ver ben sallamayaca\u011f\u0131m ve onu kullanmayaca\u011f\u0131m. &#8220;(void)&#8221; ise daha otoriter bir mesaj veriyor: sen parametre olarak bana bir \u015fey veremezsin. Parametre olarak (void) alan bir &#8220;seviyorumDe(void)&#8221; fonksiyonu uydurun, \u00e7a\u011f\u0131r\u0131rken &#8220;seviyorumDe();&#8221; \u015feklinde \u00e7a\u011f\u0131r\u0131n derleyici hi\u00e7 k\u0131zmaz. Ama &#8220;seviyorumDe(&#8220;Sevmiyorum&#8221;);&#8221; \u00a0\u015feklinde \u00e7a\u011f\u0131r\u0131rsan\u0131z derleyici size k\u0131zar. Sonra gidin fonksiyon tan\u0131m\u0131n\u0131 \u00a0&#8220;seviyorumDe(void)&#8221; yerine &#8220;seviyorumDe()&#8221; olarak tan\u0131mlay\u0131n derleyici size hi\u00e7 k\u0131zmaz. Ama fonksiyonun i\u00e7inde &#8220;Sevmiyorum&#8221; arg\u00fcman\u0131na do\u011frudan eri\u015femezsiniz. Demek ki neymi\u015f, bunun bile bir nedeni varm\u0131\u015f. Bu bile asl\u0131nda fonksiyonu \u00e7a\u011f\u0131racak ki\u015fiyi y\u00f6nlendiriyor, k\u0131s\u0131tl\u0131yormu\u015f. Yeni ibret; ezber yok.<\/p>\n<p>Dostlar, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;hello world&#8221; kodu bile bize neler neler g\u00f6sterdi. Ki mevzuyu k\u0131sa kesti\u011fimizi de belirtmek isterim. printf&#8217;in nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 da anlatmak isterdim, ama \u015fimdi \u00f6yle yapsam buras\u0131 \u00e7ok uzun olacak, belki s\u0131k\u0131lacaks\u0131n\u0131z. \u0130leride yeri geldi mi ondaki ibretleri de anlataca\u011f\u0131m \ud83d\ude42 O zamana kadar sab\u0131rla okuyun olur mu? Bu daha ba\u015flang\u0131\u00e7, m\u00fccadeleye devam!<\/p>\n<p><strong>Dosya uzant\u0131lar\u0131:\u00a0<\/strong>Selam.c ve selam.h \u00f6rneklerini anlatm\u0131\u015ft\u0131m. C programlamada muhakkak kaynak dosyalar\u0131 .c uzant\u0131l\u0131, header dosyalar\u0131 .h uzant\u0131l\u0131 olmal\u0131 dimi? Alakas\u0131 yok. selam.h dosyas\u0131n\u0131 gidin selam.ozkaya dosyas\u0131 olarak adland\u0131r\u0131n. Sonra selam.c&#8217;de gidin #include &#8220;selam.ozkaya&#8221; yaz\u0131n ve cay\u0131r cay\u0131r \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcn. gcc kullanmay\u0131 bilen varsa selam.c&#8217;yi de selam.ozen diye adland\u0131r\u0131p derlemeyi deneyebilir \ud83d\ude42 Peki niye .c ve .h diye adland\u0131r\u0131yoruz? \u00c7\u00fcnk\u00fc derleyici bir dosyay\u0131 a\u00e7t\u0131\u011f\u0131nda uzant\u0131s\u0131ndan, ona yapaca\u011f\u0131 muameleyi otomatik anlayabilsin istiyoruz. Ayn\u0131 dili konu\u015fal\u0131m istiyoruz.<\/p>\n<p>D\u0130PNOT: S\u0131rf de\u011fi\u015ftirebiliyoruz diye header i\u015flevi g\u00f6ren bir dosyan\u0131n uzant\u0131s\u0131n\u0131 ad\u0131n\u0131z soyad\u0131n\u0131z yap\u0131p milleti kanser etmeyin \ud83d\ude42 \u0130nsan okuyacak o kodu, insan \ud83d\ude42<\/p>\n<pre class=\"lang:c decode:true\">\/* c ile merhaba d\u00fcnya *\/<\/pre>\n<p>Yukar\u0131daki yorum sat\u0131r\u0131 hakk\u0131nda ne d\u00fc\u015f\u00fcn\u00fcyorsunuz? Ben kendisini i\u011fren\u00e7 buluyorum \u00e7\u00fcnk\u00fc bir amaca hizmet etmiyor. Koda bakan herkes o kodun C dili ile yaz\u0131lm\u0131\u015f bir merhaba d\u00fcnya kodu oldu\u011funu anlayabilir. B\u00f6yle yorum sat\u0131r\u0131 olmaz, hi\u00e7 bir i\u015fe yaramaz, sadece kalabal\u0131k yapar. Gereksiz kalabal\u0131\u011f\u0131 da G\u00f6m\u00fcl\u00fc C&#8217;ci sevmez. Buradan yorum sat\u0131rlar\u0131na kar\u015f\u0131 oldu\u011fumu \u00e7\u0131karmay\u0131n, yorum sat\u0131rlar\u0131 da sanatsal \u015fekilde kullan\u0131labilir. Yeri gelince detayl\u0131 anlataca\u011f\u0131m \ud83d\ude42<\/p>\n<p>\u015eimdi devam&#8230;<\/p>\n<a href=\"http:\/\/ozenozkaya.com\/blog\/?p=154\" class=\"su-button su-button-style-3d\" style=\"color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:5px\" target=\"_self\"><span style=\"color:#FFFFFF;padding:6px 16px;font-size:13px;line-height:20px;border-color:#6cadf4;border-radius:5px;text-shadow:none\"><i class=\"sui sui-arrow-circle-o-left\" style=\"font-size:13px;color:#FFFFFF\"><\/i> \u00d6nceki Sayfa<\/span><\/a> \u00a0<a href=\"http:\/\/ozenozkaya.com\/blog\/?p=186\" class=\"su-button su-button-style-3d\" style=\"color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:5px\" target=\"_self\"><span style=\"color:#FFFFFF;padding:6px 16px;font-size:13px;line-height:20px;border-color:#6cadf4;border-radius:5px;text-shadow:none\"><i class=\"sui sui-arrow-circle-right\" style=\"font-size:13px;color:#FFFFFF\"><\/i> Sonraki Sayfa<\/span><\/a>\n","protected":false},"excerpt":{"rendered":"<p>Yol haritam\u0131z malumunuz, karanl\u0131kta klavuzumuz. Efendim ne diyor harita, sanatsal programlama pratikleri diyor. Peki\u00a0nerden ba\u015flayaca\u011f\u0131z? C dilinden ba\u015flayaca\u011f\u0131z. C dili ile ilgili bir \u00e7ok yorum yap\u0131l\u0131r; \u00a0orta seviye bir dil, \u00a0hem makinaya, hem insana yak\u0131n gibi&#8230; Hepsi geyik muhabbeti! \u015eu y\u0131llarda,\u00a0C dili hala varsa ve hala bu kadar pop\u00fclerse bunun sebebi dilin g\u00f6m\u00fcl\u00fc sistemlerle olan <a class=\"read-more\" href=\"http:\/\/ozenozkaya.com\/blog\/?p=172\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_tr_post_content":"Yol haritam\u0131z malumunuz, karanl\u0131kta klavuzumuz. Efendim ne diyor harita, sanatsal programlama pratikleri diyor. Peki\u00a0nerden ba\u015flayaca\u011f\u0131z? C dilinden ba\u015flayaca\u011f\u0131z. C dili ile ilgili bir \u00e7ok yorum yap\u0131l\u0131r; \u00a0orta seviye bir dil, \u00a0hem makinaya, hem insana yak\u0131n gibi... Hepsi geyik muhabbeti! \u015eu y\u0131llarda,\u00a0C dili hala varsa ve hala bu kadar pop\u00fclerse bunun sebebi dilin g\u00f6m\u00fcl\u00fc sistemlerle olan \u015fahane uyumudur. Mevzuya a\u015fk\u0131n bu penceresinden bakal\u0131m. G\u00f6m\u00fcl\u00fc C, en nihayetinde \u00f6z\u00fcnde bildi\u011fimiz C dili. O sebeple bu k\u0131s\u0131m aman aman g\u00f6m\u00fcl\u00fc yaz\u0131l\u0131ma \u00f6zg\u00fc de\u011fil, ama merhaba d\u00fcnya kodunu g\u00f6m\u00fcl\u00fc sistemci kafas\u0131ndan pestil edece\u011fiz. S\u0131ksak ne kadar suyu \u00e7\u0131kar? G\u00f6rece\u011fiz...\r\n\r\nC dili malumunuz,\u00a0 <b>ISO\/IEC<\/b> 9899 standardlar\u0131 ile tan\u0131mlanm\u0131\u015f bir ifade bi\u00e7imi. Bir dil bir insan derler ya, o misal bir dil :) Kendisi diller familyas\u0131nda,\"yap\u0131sal\" diller s\u0131n\u0131f\u0131nda yer al\u0131yor. Yani ne diyor? Benim tasar\u0131m\u0131m yap\u0131lar (struct, enum, union) \u00fczerine dayan\u0131r diyor. Benimle konu\u015facaksan, yap\u0131lar \u00fczerinden konu\u015fsan sen karl\u0131 \u00e7\u0131kars\u0131n diyor. \u0130yi de neymi\u015f bu yap\u0131lar? Struct, enum, union dedin, de ne bunlar? Hemen d\u00f6nd\u00fck yol haritas\u0131na, ne yaz\u0131yordu bilinene referans ver k\u0131ymetliyi anlat. O zaman bu yaz\u0131y\u0131 okumadan \u00f6nce C dilini bir yerden tan\u0131m\u0131\u015f olman\u0131z gerekiyor. \u00dc\u00e7 be\u015f \u00f6rnek kodu \u00e7al\u0131\u015ft\u0131rman\u0131z gerekiyor. Yani dostlar, dost ac\u0131 s\u00f6yler, struct, enum, union nedir bilmeniz gerekiyor ki sonraki ad\u0131m olarak i\u015fin\u00a0felsefesini konu\u015fal\u0131m. \u00c7ok da tatava yapmayaca\u011f\u0131m, inan\u0131yorum ki bilmeyen de gitti okudu \u00f6\u011frendi geldi. Bilmeyen ama \u00f6\u011frenmek isteyenleri de duyar gibiyim; iyi de kaynak \u00f6nermedik? Kitap olarak: <a href=\"http:\/\/www.dr.com.tr\/kitap\/c-ve-c-deitel-deitel\/kolektif\/egitim-basvuru\/bilgisayar\/urunno=0000000168583\" target=\"_blank\">Deitel&amp;Deitel<\/a>. Online kaynak olsun ve T\u00fcrk\u00e7e olsun: ahanda <a href=\"http:\/\/www.cagataycebi.com\/programming\/\" target=\"_blank\">burada<\/a>. \u00a0Online olsun \u0130ngilizce olsun eyvallah o da <a href=\"http:\/\/www.tutorialspoint.com\/cprogramming\/\" target=\"_blank\">burada<\/a>. \u015eimdi heyecan\u0131ma yenik d\u00fc\u015f\u00fcp hemen struct, enum, union dedim ama onlardan daha \u00f6nce \u00e7ok \u00f6nemli sorular var. \u0130bretlerle dolu \"Merhaba D\u00fcnya\" var. <strong>Ezber bozan Merhaba D\u00fcnya!<\/strong>\r\n\r\nYazd\u0131\u011f\u0131n\u0131z kodlar\u0131 derlemek i\u00e7in program olarak, dev C++'\u0131, codeblocks'u, eclipse cdt'yi \u00f6nerebilirim. Sadistseniz, komut sat\u0131r\u0131ndan Gcc ile de derleme yapabilirsiniz, ki \u00e7ok keyiflidir, bilen bilir. :)\r\n\r\n\u015eimdi, bir C kitab\u0131n\u0131n\u00a0gitti\u011fi s\u0131ra ile mevzunun inceliklerini konu\u015faca\u011f\u0131z. Anl\u0131 \u015fanl\u0131, Sanatsal G\u00f6m\u00fcl\u00fc C ba\u015fl\u0131yor!\r\n<h2>SANATSAL G\u00d6M\u00dcL\u00dc C!<\/h2>\r\n<em>Yanl\u0131\u015f Bildiklerimizi Bir Kenara Koyabilmek, \u00d6\u011frenmeye A\u00e7\u0131k Olmak...<\/em>\r\n\r\nC diliyle yaz\u0131lan en basit kod diye tan\u0131t\u0131lan merhaba d\u00fcnya kodu ile ba\u015flayal\u0131m. Dakika bir, gol bir olsun. Acaba bin defa g\u00f6rd\u00fc\u011f\u00fcm\u00fcz merhaba d\u00fcnya kodundan ne kadar ibret \u00e7\u0131karabiliriz ki? \u00dc\u00e7 be\u015f sat\u0131r kod. E hadi bakal\u0131m, suyunu s\u0131kaca\u011f\u0131z demi\u015ftik. Kodun suyunu s\u0131kal\u0131m neler neler \u00e7\u0131kacak, g\u00f6relim :)\r\n<pre class=\"lang:c decode:true\">#include &lt;stdio.h&gt;\r\n\r\nint main()\r\n{\r\n   \/* c ile merhaba d\u00fcnya *\/\r\n   printf(\"Hello, World! n\");\r\n   \r\n   return 0;\r\n}<\/pre>\r\n\u015eimdi bir kere, i\u015f yapan, bir \u015fey d\u00f6nd\u00fcren en basit C kodu bu mu? Merhaba d\u00fcnya hakikaten temelin temeli mi? Hi\u00e7 alakas\u0131 yok. Ahanda size, Bah\u00e7eli'ye yard\u0131mc\u0131 i\u015f yapan \u00e7ok daha basit C kodu. Koda hi\u00e7 bir \u015fey eklemeye gerek yok, derleyicide aynen \u00e7al\u0131\u015f\u0131r. Bir \u015fey eksik diye d\u00fc\u015f\u00fcnmeyin.\r\n<pre class=\"lang:c decode:true\">int main()\r\n{  \r\n   return (29+11);\r\n}<\/pre>\r\nEe ne farketti ki? \u00c7ok \u015fey farketti. Bir kere &lt;stdio.h&gt; k\u00fct\u00fcphanesini kullanmad\u0131k. \"Yahu o, olmazsa olmaz de\u011fil miydi ya?\". Hay\u0131r efendim de\u011fildi.\u00a0&lt;stdio.h&gt; yaln\u0131zca ad\u0131 \u00fcst\u00fcnde standart giri\u015f \u00e7\u0131k\u0131\u015f (i\/o) i\u015fleri yap\u0131lacaksa kullan\u0131l\u0131r. Merhaba d\u00fcnya kodunda printf fonksiyonu \u00e7a\u011f\u0131r\u0131ld\u0131\u011f\u0131ndan elimiz kolumuz ba\u011fland\u0131, &lt;stdio.h&gt; k\u00fct\u00fcphanesini g\u00f6reve \u00e7a\u011f\u0131rd\u0131k. Peki niye &lt;&gt; ile \u00e7a\u011f\u0131rd\u0131k, bazen \"selam.h\" gibi de \u00e7a\u011f\u0131r\u0131l\u0131yor bunun hikmeti nedir? Derleyici, \u00e7a\u011f\u0131r\u0131lacak baz\u0131 header dosyalar\u0131n\u0131n konumunu ezbere bilir. Derleyicinizin \"include directories\" ayar\u0131nda bunlar\u0131 g\u00f6rebilirsiniz. Deleyicinin yerini ezbere bildi\u011fi, uzak yerlerde de bulunabilen headerlar <strong>#include &lt;selam.h&gt;<\/strong> \u015feklinde \u00e7a\u011f\u0131r\u0131l\u0131r. E\u011fer selam.h dosyas\u0131, bu header'\u0131 \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z selam.c dosyas\u0131 ile ayn\u0131 dizinde(klas\u00f6rde) ise onu\u00a0<strong>#include \"selam.h\"\u00a0<\/strong>ile \u00e7a\u011f\u0131r\u0131r\u0131z. Peki #include nas\u0131l bi\u015fi? C dilinde \"#\" ile ba\u015flayan komutlar preprocessor komutlar\u0131 diye adland\u0131r\u0131l\u0131r ve yaln\u0131zca derleme zaman\u0131nda \u00e7al\u0131\u015f\u0131r. Yani biz selam.c fonksiyonunda selam.h'\u0131 include edince derleyici derleme esnas\u0131nda gider _selam.c diye ge\u00e7ici bir dosya olu\u015fturur, selam.h'da ne var ne yoksa gider selam.c'nin tepesine koyarak toplam i\u00e7eri\u011fi _selam.c'de saklar.\r\n\r\n\u0130yi de <strong>int<\/strong> veri tipi var kodda, o nerden geliyor? Ahanda ibret detected, int veri tipi C dilinin standard tan\u0131mlamalar\u0131nda bulunan bir veri tipi oldu\u011funadan, derleyici adam olacak, onu k\u00fct\u00fcphane olmaks\u0131z\u0131n tan\u0131yacak.\r\n\r\nAma <strong>main<\/strong> olmazsa olmaz dmi? Hi\u00e7 alakas\u0131 yok. En sevmedi\u011fim genellemelerden biri de budur. Ezberdir, k\u00f6t\u00fcd\u00fcr, kemdir. \u00d6rne\u011fin ARM Cortex mimarisinde kod her zaman main'den de\u011fil ResetInterruptHandler'dan ba\u015flar. \u0130nanmazs\u0131n\u0131z, bu platformda main, reset interrupt handler taraf\u0131ndan herhangi bir fonksiyon gibi \u00e7a\u011f\u0131r\u0131l\u0131r. Nas\u0131l yani <strong>main\u00a0<\/strong>demesek <strong>ecmain\u00a0<\/strong>desek kod <strong>ecmain\u00a0<\/strong>fonksiyonuna m\u0131 gidecek? Evet. Ne derseniz ona gider. Ama al\u0131\u015fanlar\u0131 hayal k\u0131r\u0131kl\u0131\u011f\u0131na u\u011fratmamak ad\u0131na yine yalandan bir <strong>main<\/strong> \u00e7a\u011f\u0131r\u0131l\u0131r. Hmmm. Belki bu birilerini \u015fa\u015f\u0131rtm\u0131\u015ft\u0131r. Hemen ayd\u0131nlanm\u0131\u015f hissetmemek laz\u0131m\u00a0\u00e7\u00fcnk\u00fc mevzu biraz daha derin. Main fonksiyonu asl\u0131nda <strong>linker\u00a0<\/strong>day\u0131n\u0131n, kodun ba\u015flang\u0131\u00e7 noktas\u0131 olarak adresledi\u011fi bir fonksiyon. Main her \u015feyin ba\u015flang\u0131\u00e7 noktas\u0131 olsa, i\u015fletim sistemi nas\u0131l \u00e7al\u0131\u015f\u0131rd\u0131 :) Siz kodu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, onu \u00e7al\u0131\u015ft\u0131racak sistemin \u00e7al\u0131\u015fmas\u0131 gerekiyor. Demi\u015fler ki \"aga, biz bu dili bulduk, elemanlar da kod yazs\u0131n da nerden ba\u015flayacak olm bu kod?\" Biri demi\u015f ki \"ilk sat\u0131rdan ba\u015flas\u0131n i\u015fte\", \u00f6b\u00fcr\u00fc demi\u015f \"yok aga \u00f6n bilgiler laz\u0131m bir sabit\u00a0bir fonksiyon ad\u0131 belirleyelim, derleyici gitsin en az\u0131ndan o fonksiyonu aras\u0131n onun adresini bulsun bizim i\u015fletim sistemi de gitsin program\u0131 da ordan ba\u015flats\u0131n nas\u0131l ama\"? Ve akla yatm\u0131\u015f tamam demi\u015fler. Biz bi linker yazsak, windows \u00fczerinde \u00e7al\u0131\u015fsa ne yazmam\u0131z gerekirdi? Window's bunu nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131rd\u0131? Mevzuyu anlamam\u0131z\u0131 sa\u011flayan soru bu? C program\u0131 nas\u0131l \u00e7al\u0131\u015f\u0131r de\u011fil. Bu ters y\u00f6nden hedefe varmam\u0131z\u0131 sa\u011flayacak. Compiler gitti bizim dosyalar\u0131 derledi biz de birle\u015ftirerek\u00a0\u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirece\u011fiz. Ne yapaca\u011f\u0131z? Diyece\u011fiz ki; misal bizim program \"<strong>bigbang<\/strong>\" fonksiyonundan ba\u015flas\u0131n. Ben bir dil yazsam her \u015fey bigbang ile ba\u015flard\u0131 \u00e7\u00fcnk\u00fc. Neyse bizim c dosyalar\u0131nda kullan\u0131lan sembolleri, ba\u015fka dosyalarda da aray\u0131p bulup birle\u015ftirdik. Adam d\u00fczg\u00fcn yazd\u0131 diye varsay\u0131m yap\u0131yoruz ki bigbang fonksiyonu da yazm\u0131\u015f bir tane. S\u00fcper! \u0130\u015fletim sistemi ne yapacak? Gidecek bakacak; bu program ne kadar ram kullanacaksa, o kadar yeri ay\u0131racak ayarlayacak. Sembollere adresler atayacak, kendi task scheduler'\u0131n\u0131n stack'ini filan ayarlay\u0131p bizim program\u0131 \"bigbang\" fonksiyonunun bellekteki adresinden ba\u015flatacak. Sonra da malumunuz bizim merhaba d\u00fcnya kodu \u00e7al\u0131\u015facak. Vay beee. Ne yolculuk g\u00f6r\u00fcyor musunuz? Bunun da \u00f6ncesi var, bilgisayar nas\u0131l aya\u011fa kalk\u0131yor filan? Ama onlar sonran\u0131n mevzusu. Almam\u0131z gereken <strong>ibret<\/strong> \u015fu: main de neticede bir fonksiyon...\u00a0Linker, bizim elemanlar\u0131n ald\u0131\u011f\u0131 karar y\u00fcz\u00fcnden onu ar\u0131yor. Aras\u0131n dursun madem. \u015eimdi ibretlere devam.\r\n\r\n\"<strong>int main()<\/strong>\" yazd\u0131k. Bu ne demek; \"<strong>int main(void)<\/strong>\" demek asl\u0131nda ama biz k\u0131sa olsun diye \u00f6yle yazd\u0131k dmi? <strong>De\u011fil<\/strong>. \u0130kisi aras\u0131nda ince bir fark var. Buna da gelece\u011fiz ama, \u00f6nce s\u0131rayla gidelim. Bir kere, fonksiyonu soldan sa\u011fa inceleyelim. <strong>int<\/strong> d\u00f6nd\u00fcrmesi ne demek fonksiyonun? \u015eu demektir ki;\u00a0fonksiyon bir makine gibi \u00e7al\u0131\u015f\u0131rsa, i\u015fini bitirince bize bir say\u0131 verecek demektir. \u0130yi de bizim program \u00e7al\u0131\u015ft\u0131 bitti 0(s\u0131f\u0131r) d\u00f6nd\u00fcrd\u00fc, bu 0(s\u0131f\u0131r) kime, niye gitti, ne anlatmaya \u00e7al\u0131\u015ft\u0131? Burada\u00a0<strong>main\u00a0<\/strong>\u00f6zel bir fonksiyon etiketi oldu\u011fundan verdi\u011fi mesaj i\u015fletim sistemine gider. Yani bizim Merhaba d\u00fcnya, do\u011fru d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131p i\u015fini bitirirse, bir yerde tak\u0131lmazsa i\u015fletim sistemine 0(s\u0131f\u0131r) say\u0131s\u0131n\u0131 g\u00f6nderir. Ama niye s\u0131f\u0131r? \u00c7\u00fcnk\u00fc bir \u00e7ok hata \u00e7\u0131kabilir, ama program\u0131n hatas\u0131z tamamlanma ihtimali bir tanedir. Biz her bir hataya s\u0131f\u0131rdan farkl\u0131 bir say\u0131 de\u011feri atarsak, hatas\u0131zl\u0131\u011fa da tek bir \u015fekilde(tek bir sebeple) ger\u00e7ekle\u015fece\u011finden s\u0131f\u0131r\u00a0de\u011ferini atarsak ne olur? \u00c7i\u00e7ek olur \u00e7i\u00e7ek. Bizim programda diyelim bellek ayr\u0131lamad\u0131... O\u00a0hataya 1 desek, printf ekrana bir \u015fey yazamad\u0131; o hata 2 desek, ba\u015fkas\u0131na 3 desek filan t\u00fcm hatalar\u0131 indeksleyebiliriz. Hata\u00a0kodunun 0(s\u0131f\u0131r) olmas\u0131, hata yok demektir. O nedenle 0(s\u0131f\u0131r) d\u00f6nd\u00fcr\u00fcl\u00fcr. Hata kodu da say\u0131 olaca\u011f\u0131ndan dolay\u0131 da main int d\u00f6nd\u00fcr\u00fcr, ki hakk\u0131d\u0131r yapar. \u00a0\u00d6nceden main'in ad\u0131 niye main onu anlatm\u0131\u015ft\u0131k.\u015eimdi \u015fu \"()\" vs \"(void)\" fark\u0131na gelelim. Bir fonksiyon parametre olarak \"()\" al\u0131yorsa, bu \u015fu demektir: sen parametre olarak ne verirsen ver ben sallamayaca\u011f\u0131m ve onu kullanmayaca\u011f\u0131m. \"(void)\" ise daha otoriter bir mesaj veriyor: sen parametre olarak bana bir \u015fey veremezsin. Parametre olarak (void) alan bir \"seviyorumDe(void)\" fonksiyonu uydurun, \u00e7a\u011f\u0131r\u0131rken \"seviyorumDe();\" \u015feklinde \u00e7a\u011f\u0131r\u0131n derleyici hi\u00e7 k\u0131zmaz. Ama \"seviyorumDe(\"Sevmiyorum\");\" \u00a0\u015feklinde \u00e7a\u011f\u0131r\u0131rsan\u0131z derleyici size k\u0131zar. Sonra gidin fonksiyon tan\u0131m\u0131n\u0131 \u00a0\"seviyorumDe(void)\" yerine \"seviyorumDe()\" olarak tan\u0131mlay\u0131n derleyici size hi\u00e7 k\u0131zmaz. Ama fonksiyonun i\u00e7inde \"Sevmiyorum\" arg\u00fcman\u0131na do\u011frudan eri\u015femezsiniz. Demek ki neymi\u015f, bunun bile bir nedeni varm\u0131\u015f. Bu bile asl\u0131nda fonksiyonu \u00e7a\u011f\u0131racak ki\u015fiyi y\u00f6nlendiriyor, k\u0131s\u0131tl\u0131yormu\u015f. Yeni ibret; ezber yok.\r\n\r\nDostlar, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi \"hello world\" kodu bile bize neler neler g\u00f6sterdi. Ki mevzuyu k\u0131sa kesti\u011fimizi de belirtmek isterim. printf'in nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 da anlatmak isterdim, ama \u015fimdi \u00f6yle yapsam buras\u0131 \u00e7ok uzun olacak, belki s\u0131k\u0131lacaks\u0131n\u0131z. \u0130leride yeri geldi mi ondaki ibretleri de anlataca\u011f\u0131m :) O zamana kadar sab\u0131rla okuyun olur mu? Bu daha ba\u015flang\u0131\u00e7, m\u00fccadeleye devam!\r\n\r\n<strong>Dosya uzant\u0131lar\u0131:\u00a0<\/strong>Selam.c ve selam.h \u00f6rneklerini anlatm\u0131\u015ft\u0131m. C programlamada muhakkak kaynak dosyalar\u0131 .c uzant\u0131l\u0131, header dosyalar\u0131 .h uzant\u0131l\u0131 olmal\u0131 dimi? Alakas\u0131 yok. selam.h dosyas\u0131n\u0131 gidin selam.ozkaya dosyas\u0131 olarak adland\u0131r\u0131n. Sonra selam.c'de gidin #include \"selam.ozkaya\" yaz\u0131n ve cay\u0131r cay\u0131r \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcn. gcc kullanmay\u0131 bilen varsa selam.c'yi de selam.ozen diye adland\u0131r\u0131p derlemeyi deneyebilir :) Peki niye .c ve .h diye adland\u0131r\u0131yoruz? \u00c7\u00fcnk\u00fc derleyici bir dosyay\u0131 a\u00e7t\u0131\u011f\u0131nda uzant\u0131s\u0131ndan, ona yapaca\u011f\u0131 muameleyi otomatik anlayabilsin istiyoruz. Ayn\u0131 dili konu\u015fal\u0131m istiyoruz.\r\n\r\nD\u0130PNOT: S\u0131rf de\u011fi\u015ftirebiliyoruz diye header i\u015flevi g\u00f6ren bir dosyan\u0131n uzant\u0131s\u0131n\u0131 ad\u0131n\u0131z soyad\u0131n\u0131z yap\u0131p milleti kanser etmeyin :) \u0130nsan okuyacak o kodu, insan :)\r\n<pre class=\"lang:c decode:true\">\/* c ile merhaba d\u00fcnya *\/<\/pre>\r\nYukar\u0131daki yorum sat\u0131r\u0131 hakk\u0131nda ne d\u00fc\u015f\u00fcn\u00fcyorsunuz? Ben kendisini i\u011fren\u00e7 buluyorum \u00e7\u00fcnk\u00fc bir amaca hizmet etmiyor. Koda bakan herkes o kodun C dili ile yaz\u0131lm\u0131\u015f bir merhaba d\u00fcnya kodu oldu\u011funu anlayabilir. B\u00f6yle yorum sat\u0131r\u0131 olmaz, hi\u00e7 bir i\u015fe yaramaz, sadece kalabal\u0131k yapar. Gereksiz kalabal\u0131\u011f\u0131 da G\u00f6m\u00fcl\u00fc C'ci sevmez. Buradan yorum sat\u0131rlar\u0131na kar\u015f\u0131 oldu\u011fumu \u00e7\u0131karmay\u0131n, yorum sat\u0131rlar\u0131 da sanatsal \u015fekilde kullan\u0131labilir. Yeri gelince detayl\u0131 anlataca\u011f\u0131m :)\r\n\r\n\u015eimdi devam...\r\n\r\n[su_button url=\"http:\/\/ozenozkaya.com\/blog\/?p=154\" style=\"3d\"\u00a0icon=\"icon: arrow-circle-o-left\"]\u00d6nceki Sayfa[\/su_button] \u00a0[su_button url=\"http:\/\/ozenozkaya.com\/blog\/?p=186\" style=\"3d\" icon=\"icon: arrow-circle-right\"]Sonraki Sayfa[\/su_button]","_tr_post_name":"gomulu-sistemler-13-gomulu-cye-giris-merhaba-dunya","_tr_post_excerpt":"","_tr_post_title":"G\u00f6m\u00fcl\u00fc C - 2 : G\u00f6m\u00fcl\u00fc C'ye Giri\u015f : Merhaba d\u00fcnya","_en_post_content":"","_en_post_name":"","_en_post_excerpt":"","_en_post_title":"","edit_language":"tr","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[2,3],"tags":[],"class_list":["post-172","post","type-post","status-publish","format-standard","hentry","category-elektronik","category-gomulu-sistemler"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5gWM6-2M","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=172"}],"version-history":[{"count":3,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/172\/revisions"}],"predecessor-version":[{"id":557,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/172\/revisions\/557"}],"wp:attachment":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=172"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}