{"id":245,"date":"2015-01-31T13:44:11","date_gmt":"2015-01-31T11:44:11","guid":{"rendered":"http:\/\/ozenozkaya.com\/blog\/?p=245"},"modified":"2015-01-31T13:44:11","modified_gmt":"2015-01-31T11:44:11","slug":"gomulu-sistemler-17-gomulu-c-lezzetli-dosya-formati","status":"publish","type":"post","link":"http:\/\/ozenozkaya.com\/blog\/?p=245","title":{"rendered":"G\u00f6m\u00fcl\u00fc C &#8211; 6 : Lezzetli Dosya Format\u0131"},"content":{"rendered":"<p>Oprat\u00f6rlerden sonra, sizlere de bizlere de bir nefes ald\u0131racak bir konuya de\u011fineyim istedim. Kafalar\u0131m\u0131z\u0131 dinlendirmek i\u00e7in araya g\u00fczel bir konu s\u0131k\u0131\u015ft\u0131r\u0131yorum. C dilinde yaz\u0131lacak bir yaz\u0131l\u0131m i\u00e7in dosya format\u0131 nas\u0131l olursa yak\u0131\u015f\u0131kl\u0131 olur ona de\u011finece\u011fim. Malumunuz C&#8217;de, terbiyemizi tak\u0131narak yazd\u0131\u011f\u0131m\u0131z yaz\u0131l\u0131mlarda, uzant\u0131s\u0131na g\u00f6re iki \u00e7e\u015fit dosya oluyor: c ve h dosyalar\u0131. Bunlar\u0131n adam ak\u0131ll\u0131 organizasyonu, seneler i\u00e7inde edinilen bilgi ve tecr\u00fcbeler vesilesiyle, ibretlik bilgiler i\u00e7eren bir hal al\u0131yor. Ben de bu bilgiyi burada sizlere aktarmaya \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n<p>Her yi\u011fidin bir yo\u011furt yiyi\u015fi vard\u0131r demi\u015fler. Dosya format\u0131 mevsusu da bu mevzuya epeyce\u00a0benzer. Her yi\u011fit yo\u011furdu ba\u015fka yiyebilir ama g\u00fczel yo\u011furt her zaman g\u00fczel yo\u011furttur. Ben de g\u00fczel bir yo\u011furdu, kendi tarz\u0131mla sizlere sunaca\u011f\u0131m. \u00d6yleyse haydi ba\u015flayal\u0131m!<\/p>\n<p>Not:Bu vesileyle bu yaz\u0131n\u0131n temas\u0131n\u0131n yo\u011furt oldu\u011funu bilgilerinize arz etmek isterim.<\/p>\n<p><strong>Source (Kaynak) Dosyalar\u0131<\/strong><\/p>\n<ul>\n<li>Kaynak dosyalar\u0131n\u0131n uzant\u0131s\u0131: *.c olmal\u0131d\u0131r. \u00d6rne\u011fin yogurt.c<\/li>\n<li>Dosya isminde T\u00fcrk\u00e7e karakter kullanmazsan\u0131z, yo\u011furdunuz ek\u015fimez.<\/li>\n<li>Dosya adlar\u0131 a\u00e7\u0131k ve anla\u015f\u0131labilir olmal\u0131d\u0131r. Dosya ad\u0131n\u0131 k\u0131sa yazman\u0131n Murphy d\u0131\u015f\u0131nda kimseye bir faydas\u0131 yoktur.<\/li>\n<li>Dosya ad\u0131 k\u00fc\u00e7\u00fck harflerle ba\u015flamal\u0131d\u0131r. \u00d6rne\u011fin YaRaLiKaRiZmA34.c gibi ergen isimlendirmeleri ile yap\u0131lan yo\u011furttan cac\u0131k bile yap\u0131lmaz.<\/li>\n<li>Dosyan\u0131n uzant\u0131s\u0131 da k\u00fc\u00e7\u00fck c olamal\u0131d\u0131r. ayran.C gibi isimlendirmeler, cehalete delalet eder. Yapmamak laz\u0131m, \u00e7irkinle\u015fmeye hi\u00e7 gerek yok.<\/li>\n<li>Yerel, lokal, private(umumi olmayan) elemanlar statik tan\u0131mlanmal\u0131d\u0131r.<\/li>\n<li>Extern s\u00f6zc\u00fc\u011f\u00fc, yo\u011furttaki zararl\u0131 bir bakteri \u00e7e\u015fididir. Onsuz da g\u00fczel yo\u011furt yap\u0131labilir.<\/li>\n<\/ul>\n<p>\u00c7ok g\u00fczel ahkam kestim ama fark\u0131nday\u0131m ki vakit, lafa karn\u0131 tok olan siz de\u011ferli okuyucuma lezzetli bir yo\u011furt sunma vaktidir.<\/p>\n<pre class=\"lang:c decode:true\">\/** file\n* brief This module contains the XXX\n* author \u00d6zen \u00d6zkaya, ozenozkaya.com\n* date 31.01.2015\n* date Copyright \u00a9 Ozkaya Inc., 2015. All Rights Reserved.\n**\/\n#define SAMPLE_C\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                            MODULES USED                                **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n#include &lt;stdint.h&gt;\n#include &lt;string.h&gt;\n#include \"sample.h\"\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                         DEFINITIONS AND MACROS                         **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n#define BIT_SET(data,bit) do{ data |= (1&lt;&lt;bit) }while(0)\n#define BIT_CLR(data,bit) do{ data &amp;= ~(1&lt;&lt;bit) }while(0)\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                     PRIVATE TYPEDEFS AND STRUCTURES                    **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\ntypedef union\n{\nuint8_t au8Data[4];\nint8_t as8Data[4];\nuint16_t au16Data[2];\nint16_t as16Data[2];\nuint32_t u32Data;\nint32_t s32Data;\n}tu_DataGroup32;\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                    PROTOTYPES OF LOCAL\/PRIVATE FUNCTIONS               **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nstatic void Sample_PrivateFunction( void);\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                            GLOBAL VARIABLES                            **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nuint32_t u32SampleIndex=0;\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                      EXPORTED\/PUBLIC FUNCTION IMPLEMENTATIONS          **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nint32_t Sample_PublicFunction(void)\n{\nreturn u32SampleIndex;\n}\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                       LOCAL\/PRIVATE FUNCTION IMPLEMENTATIONS           **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nstatic void Sample_PrivateFunction(void)\n{\n}<\/pre>\n<p>Sevgili okuyucu, yukar\u0131daki kod \u015fablonunu ingilizce yazd\u0131m ama l\u00fctfen k\u0131r\u0131lmay\u0131n dar\u0131lmay\u0131n. \u0130ngilizce bilmiyorsan\u0131z bile \u00e7eviri ile anlamlar\u0131n\u0131 \u00f6\u011frenmek \u00e7ok \u00e7ok kolay. \u00d6yle kompleks \u015feyler yazmad\u0131m. \u00d6nceden dedi\u011fim gibi bir yaz\u0131l\u0131m\u0131 yazarken tek bir insan dilinde yazmak laz\u0131m. Ben, terminoloji \u0130ngilizce oldu\u011fundan ve profesyonel hayat\u0131mda da kodlar\u0131 \u0130ngilizce istediklerinden format\u0131 \u0130ngilizce olarak payla\u015f\u0131yorum. Dana yo\u011furdu deyip Angus yo\u011furdu g\u00f6stermi\u015f olabilirim ama beni anlayaca\u011f\u0131n\u0131z\u0131 biliyorum. K\u0131zmay\u0131n, dar\u0131lmay\u0131n, trip atmay\u0131n.<\/p>\n<p>Yukar\u0131daki format\u0131 inceledi\u011fimizde, format\u0131n say\u0131s\u0131z ibretler i\u00e7erdi\u011fini g\u00f6rebilirsiniz. Bir kere ba\u015fl\u0131klar filan bir ilgin\u00e7. Baz\u0131lar\u0131n\u0131za bu g\u00fczel yo\u011furt tan\u0131d\u0131k geldiyse dilinizin ucundaki s\u00f6zc\u00fc\u011f\u00fc ben s\u00f6yleyeyim. <a title=\"www.doxygen.org\" href=\"http:\/\/www.doxygen.org\" target=\"_blank\">DOXYGEN<\/a>!!! Kanl\u0131ca yo\u011furdunu, pudra \u015fekeri olmadan yemek nas\u0131l tarihi bir hata ise, bir dosyadaki yorumlar\u0131 DOXYGEN&#8217;i sallamadan yapmak da o derecede talihsiz bir hatad\u0131r. Nitekim Doxygen ile yazan bir \u00fcstad&#8217;\u0131n yo\u011furdu, cam\u0131\u015f yo\u011furdu gibi ta\u015f gibi olacakt\u0131r. Kodu yazan bu b\u00fcy\u00fck \u00fcstad, kodun d\u00f6k\u00fcmantasyonunu da aradan \u00e7\u0131karm\u0131\u015f olacakt\u0131r. \u015eimdi ben Doxygen dedim ama burada onu anlatmayaca\u011f\u0131m. \u00c7\u00fcnk\u00fc tonla kaynak var ve \u00f6\u011frenmek \u00e7ok kolay. Sadece haberiniz yoksa, duyduysan\u0131z ama \u00e7ok \u00f6nemsemediyseniz diye bir de\u011fineyim istedim.<\/p>\n<pre class=\"lang:c decode:true\">#define SAMPLE_C<\/pre>\n<p>Yukar\u0131daki define sat\u0131r\u0131 da asl\u0131nda yo\u011furttaki zarars\u0131z bir bakteri gibi g\u00f6r\u00fcn\u00fcyor ama asl\u0131nda bu zarars\u0131z bakteri, say\u0131s\u0131z hastal\u0131\u011fa iyi gelir. E\u011fer mod\u00fcler bir tasar\u0131m yapt\u0131ysan\u0131z her bir dosyay\u0131 bir mini mod\u00fcl gibi d\u00fc\u015f\u00fcnmek isteyebilirsiniz. Bu yukar\u0131daki define size, bir mod\u00fcl projenizde var m\u0131 yok mu anlama imkan\u0131 sunar. Ba\u015fka bir kaynak dosyas\u0131nda #ifdef SAMPLE_C diyerekten o varsa \u015funu yap, yoksa da yo\u011furt yapmaktan vazge\u00e7me bunu yap diyebilirsiniz. Bu gibi nice ibret, bu yo\u011furttaki bu bakterinin, faydal\u0131 bir bakteri oldu\u011funu bizlere g\u00f6stermektedir.<\/p>\n<p>Devam edecek olursak, defines &amp; macros k\u0131sm\u0131 g\u00f6r\u00fcr\u00fcz. Bi dakka! Define ifadelerinin h dosyas\u0131nda olmas\u0131 gerekmez mi? Evet ne yaz\u0131k ki yanl\u0131\u015fl\u0131kla koymu\u015fum onu C dosyas\u0131na demeyece\u011fim \u00e7\u00fcnk\u00fc bunun da ibretlik bir sebebi var. baz\u0131 makrolar ya da define&#8217;lar, di\u011fer mod\u00fclleri de ilgilendirecek onlar\u0131n da i\u015fine yarayebilecek \u015feyler olduklar\u0131ndan, umuma hizmet a\u00e7\u0131s\u0131ndan bu define&#8217;lar h dosyas\u0131na konur. Ama baz\u0131 makrolar, define ifadeleri de vard\u0131r ki, onlar yi\u011fidin yatak odas\u0131 gibidir, d\u0131\u015far\u0131 a\u00e7\u0131lmalar\u0131 ho\u015f olmaz (?). Neyse konuyu sapt\u0131rmayay\u0131m, t\u0131pk\u0131 de\u011fi\u015fkenler ve fonksiyonlar gibi, makrolar\u0131 da d\u0131\u015far\u0131ya a\u00e7mamay\u0131 se\u00e7ebilirsiniz, bu durumda bu makrolar C dosyas\u0131nda tan\u0131mlan\u0131r. \u00a0Mevzuyu daha da uzatmayaca\u011f\u0131m, anlad\u0131n\u0131z siz onu.<\/p>\n<p>Dosyan\u0131n geri kalan\u0131n\u0131 \u00e7ok detayl\u0131 a\u00e7\u0131klamayaca\u011f\u0131m. Static olan fonksiyonlar umuma a\u00e7\u0131k olmayan fonksiyonlar oluyor. Yo\u011furdu yemek i\u00e7in i\u00e7indeki bakterilerle tan\u0131\u015f\u0131p \u00e7ay partisi yapmaya gerek yok. Static olan bu fonksiyonlar, mod\u00fcl\u00fcn i\u00e7 meseleleri. Static olmayanlarsa umuma hizmet olarak, d\u0131\u015far\u0131ya a\u00e7\u0131lan elemanlar. Bunlar da yo\u011furdun kayma\u011f\u0131. Static olmayan fonksiyonlar\u0131n prototipleri, h dosyas\u0131nda yer alacak. Fonksiyon prototipini yazmak, derleyiciye &#8220;bak haberin olsun bro, b\u00f6yle bi fonksiyon var sonra duymad\u0131m etmedim deme&#8221; demek oldu\u011fundan, umuma duyurulacak fonksiyonlar\u0131n prototipleri do\u011fal olarak h dosyas\u0131nda yer al\u0131r. Static fonksiyonlar\u0131n prototipleri de c dosyas\u0131nda yer al\u0131r. Static fonksiyon prototipinin h dosyas\u0131nda yer ald\u0131\u011f\u0131 durum da vard\u0131r ve ibretlik bir durumdur ama \u00e7ok \u00e7ok istisnai oldu\u011fundan onu yok saymak hakk\u0131m\u0131zd\u0131r. Nedenleriniz \u00e7ok kuvvetli de\u011filse yapmay\u0131n etmeyin. Kanl\u0131ca yo\u011furdu gibi dosya format\u0131 var. Monalisa tablosunun kopyas\u0131 gibi, al evine duvar\u0131na as.<\/p>\n<p><strong>Header (Ba\u015fl\u0131k) Dosyas\u0131<\/strong><\/p>\n<ul>\n<li>Ba\u015fl\u0131k\u00a0dosyalar\u0131n\u0131n uzant\u0131s\u0131: *.h olmal\u0131d\u0131r. \u00d6rne\u011fin yogurt.h<\/li>\n<li>Kaynak dosyalar\u0131n\u0131n isimlendirilmesindeki maddeler, 2. maddeden itibaren aynen ge\u00e7erlidir.<\/li>\n<\/ul>\n<pre class=\"lang:c decode:true\">#ifndef H_SAMPLE\n#define H_SAMPLE\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                             MODULES USED                               **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n#include \"common.h\"\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                      PUBLIC DEFINITIONS AND MACROS                     **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                      PUBLIC TYPEDEFS AND STRUCTURES                    **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\ntypedef struct\n{\nuint32_t taskIndex;\nMBX_T OwnMbxToken;\n}ts_Sample,*ts_SamplePtr;\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                         PUBLIC\/EXPORTED FUNCTIONS                      **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n\nuint32_t Sample_PublicFunction(void);\n\n#endif \/*H_SAMPLE*\/<\/pre>\n<p>Yukar\u0131daki ba\u015fl\u0131k dosyas\u0131n\u0131n hikmetlerinin bir \u00e7o\u011funu art\u0131k anlayabiliyorsunuz. Bir tek a\u015fa\u011f\u0131daki k\u0131sm\u0131 a\u00e7\u0131klayay\u0131m:<\/p>\n<pre class=\"lang:default decode:true \">#ifndef H_SAMPLE\n#define H_SAMPLE\n...\n#endif \/*H_SAMPLE*\/<\/pre>\n<p>Bazen, dostlar; bir kaynak dosyas\u0131 istemeden de olsa ayn\u0131 header dosyas\u0131n\u0131 iki defa \u00e7a\u011f\u0131rabilir. \u00d6rne\u011fin bizim kaynak dosyam\u0131z olan cacik.c, yogurt.h ve hiyar.h&#8217;\u0131 include etsin. E\u011fer hem yogurt.h hem de hiyar.h dosyalar\u0131 i\u00e7erde yemek.h dosyas\u0131n\u0131 include ediyorsa, bizim cacik.c asl\u0131nda yemek.h dosyas\u0131n\u0131 iki defa include etmi\u015f olur. Bu da \u00e7ok tats\u0131z bir yo\u011furt yiyi\u015f \u015feklidir ve besin zehirlenmesine sebep olabilir. Bunu engellemek i\u00e7in yukar\u0131daki ifdef yap\u0131s\u0131 kullan\u0131l\u0131r. Bu durumda header dosyas\u0131 iki defa \u00e7a\u011f\u0131r\u0131lsa dahi ilk \u00e7a\u011f\u0131rmada defined olmayan H_SAMPLE, defined olaca\u011f\u0131ndan bir daha bu header dosyas\u0131n\u0131n i\u00e7ine girilmez yani asl\u0131nda bu header iki defa include edilemez. Bu da bir yi\u011fide yak\u0131\u015fan bir yo\u011furt yeme \u015feklidir.<\/p>\n<p>Bendeniz, zat-\u0131 alilerinize, dosya formatlar\u0131 hususundaki bak\u0131\u015f\u0131m\u0131 aktard\u0131m. Art\u0131k bunu yorumlamak veya ilerletmek sizlere kalm\u0131\u015f. Yaz\u0131y\u0131 okudu\u011funuz i\u00e7in te\u015fekk\u00fcrler \ud83d\ude42<\/p>\n<p>\u015eimdi devam&#8230;<\/p>\n<a href=\"http:\/\/ozenozkaya.com\/blog\/?p=220\" 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=248\" 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<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oprat\u00f6rlerden sonra, sizlere de bizlere de bir nefes ald\u0131racak bir konuya de\u011fineyim istedim. Kafalar\u0131m\u0131z\u0131 dinlendirmek i\u00e7in araya g\u00fczel bir konu s\u0131k\u0131\u015ft\u0131r\u0131yorum. C dilinde yaz\u0131lacak bir yaz\u0131l\u0131m i\u00e7in dosya format\u0131 nas\u0131l olursa yak\u0131\u015f\u0131kl\u0131 olur ona de\u011finece\u011fim. Malumunuz C&#8217;de, terbiyemizi tak\u0131narak yazd\u0131\u011f\u0131m\u0131z yaz\u0131l\u0131mlarda, uzant\u0131s\u0131na g\u00f6re iki \u00e7e\u015fit dosya oluyor: c ve h dosyalar\u0131. Bunlar\u0131n adam ak\u0131ll\u0131 organizasyonu, <a class=\"read-more\" href=\"http:\/\/ozenozkaya.com\/blog\/?p=245\">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":"Oprat\u00f6rlerden sonra, sizlere de bizlere de bir nefes ald\u0131racak bir konuya de\u011fineyim istedim. Kafalar\u0131m\u0131z\u0131 dinlendirmek i\u00e7in araya g\u00fczel bir konu s\u0131k\u0131\u015ft\u0131r\u0131yorum. C dilinde yaz\u0131lacak bir yaz\u0131l\u0131m i\u00e7in dosya format\u0131 nas\u0131l olursa yak\u0131\u015f\u0131kl\u0131 olur ona de\u011finece\u011fim. Malumunuz C'de, terbiyemizi tak\u0131narak yazd\u0131\u011f\u0131m\u0131z yaz\u0131l\u0131mlarda, uzant\u0131s\u0131na g\u00f6re iki \u00e7e\u015fit dosya oluyor: c ve h dosyalar\u0131. Bunlar\u0131n adam ak\u0131ll\u0131 organizasyonu, seneler i\u00e7inde edinilen bilgi ve tecr\u00fcbeler vesilesiyle, ibretlik bilgiler i\u00e7eren bir hal al\u0131yor. Ben de bu bilgiyi burada sizlere aktarmaya \u00e7al\u0131\u015faca\u011f\u0131m.\n\nHer yi\u011fidin bir yo\u011furt yiyi\u015fi vard\u0131r demi\u015fler. Dosya format\u0131 mevsusu da bu mevzuya epeyce\u00a0benzer. Her yi\u011fit yo\u011furdu ba\u015fka yiyebilir ama g\u00fczel yo\u011furt her zaman g\u00fczel yo\u011furttur. Ben de g\u00fczel bir yo\u011furdu, kendi tarz\u0131mla sizlere sunaca\u011f\u0131m. \u00d6yleyse haydi ba\u015flayal\u0131m!\n\nNot:Bu vesileyle bu yaz\u0131n\u0131n temas\u0131n\u0131n yo\u011furt oldu\u011funu bilgilerinize arz etmek isterim.\n\n<strong>Source (Kaynak) Dosyalar\u0131<\/strong>\n\n<ul>\n    <li>Kaynak dosyalar\u0131n\u0131n uzant\u0131s\u0131: *.c olmal\u0131d\u0131r. \u00d6rne\u011fin yogurt.c<\/li>\n    <li>Dosya isminde T\u00fcrk\u00e7e karakter kullanmazsan\u0131z, yo\u011furdunuz ek\u015fimez.<\/li>\n    <li>Dosya adlar\u0131 a\u00e7\u0131k ve anla\u015f\u0131labilir olmal\u0131d\u0131r. Dosya ad\u0131n\u0131 k\u0131sa yazman\u0131n Murphy d\u0131\u015f\u0131nda kimseye bir faydas\u0131 yoktur.<\/li>\n    <li>Dosya ad\u0131 k\u00fc\u00e7\u00fck harflerle ba\u015flamal\u0131d\u0131r. \u00d6rne\u011fin YaRaLiKaRiZmA34.c gibi ergen isimlendirmeleri ile yap\u0131lan yo\u011furttan cac\u0131k bile yap\u0131lmaz.<\/li>\n    <li>Dosyan\u0131n uzant\u0131s\u0131 da k\u00fc\u00e7\u00fck c olamal\u0131d\u0131r. ayran.C gibi isimlendirmeler, cehalete delalet eder. Yapmamak laz\u0131m, \u00e7irkinle\u015fmeye hi\u00e7 gerek yok.<\/li>\n    <li>Yerel, lokal, private(umumi olmayan) elemanlar statik tan\u0131mlanmal\u0131d\u0131r.<\/li>\n    <li>Extern s\u00f6zc\u00fc\u011f\u00fc, yo\u011furttaki zararl\u0131 bir bakteri \u00e7e\u015fididir. Onsuz da g\u00fczel yo\u011furt yap\u0131labilir.<\/li>\n<\/ul>\n\n\u00c7ok g\u00fczel ahkam kestim ama fark\u0131nday\u0131m ki vakit, lafa karn\u0131 tok olan siz de\u011ferli okuyucuma lezzetli bir yo\u011furt sunma vaktidir.\n\n<pre class=\"lang:c decode:true\">\/** file\n* brief This module contains the XXX\n* author \u00d6zen \u00d6zkaya, ozenozkaya.com\n* date 31.01.2015\n* date Copyright \u00a9 Ozkaya Inc., 2015. All Rights Reserved.\n**\/\n#define SAMPLE_C\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                            MODULES USED                                **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n#include &lt;stdint.h&gt;\n#include &lt;string.h&gt;\n#include \"sample.h\"\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                         DEFINITIONS AND MACROS                         **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n#define BIT_SET(data,bit) do{ data |= (1&lt;&lt;bit) }while(0)\n#define BIT_CLR(data,bit) do{ data &amp;= ~(1&lt;&lt;bit) }while(0)\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                     PRIVATE TYPEDEFS AND STRUCTURES                    **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\ntypedef union\n{\nuint8_t au8Data[4];\nint8_t as8Data[4];\nuint16_t au16Data[2];\nint16_t as16Data[2];\nuint32_t u32Data;\nint32_t s32Data;\n}tu_DataGroup32;\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                    PROTOTYPES OF LOCAL\/PRIVATE FUNCTIONS               **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nstatic void Sample_PrivateFunction( void);\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                            GLOBAL VARIABLES                            **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nuint32_t u32SampleIndex=0;\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                      EXPORTED\/PUBLIC FUNCTION IMPLEMENTATIONS          **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nint32_t Sample_PublicFunction(void)\n{\nreturn u32SampleIndex;\n}\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                       LOCAL\/PRIVATE FUNCTION IMPLEMENTATIONS           **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\nstatic void Sample_PrivateFunction(void)\n{\n}<\/pre>\n\nSevgili okuyucu, yukar\u0131daki kod \u015fablonunu ingilizce yazd\u0131m ama l\u00fctfen k\u0131r\u0131lmay\u0131n dar\u0131lmay\u0131n. \u0130ngilizce bilmiyorsan\u0131z bile \u00e7eviri ile anlamlar\u0131n\u0131 \u00f6\u011frenmek \u00e7ok \u00e7ok kolay. \u00d6yle kompleks \u015feyler yazmad\u0131m. \u00d6nceden dedi\u011fim gibi bir yaz\u0131l\u0131m\u0131 yazarken tek bir insan dilinde yazmak laz\u0131m. Ben, terminoloji \u0130ngilizce oldu\u011fundan ve profesyonel hayat\u0131mda da kodlar\u0131 \u0130ngilizce istediklerinden format\u0131 \u0130ngilizce olarak payla\u015f\u0131yorum. Dana yo\u011furdu deyip Angus yo\u011furdu g\u00f6stermi\u015f olabilirim ama beni anlayaca\u011f\u0131n\u0131z\u0131 biliyorum. K\u0131zmay\u0131n, dar\u0131lmay\u0131n, trip atmay\u0131n.\n\nYukar\u0131daki format\u0131 inceledi\u011fimizde, format\u0131n say\u0131s\u0131z ibretler i\u00e7erdi\u011fini g\u00f6rebilirsiniz. Bir kere ba\u015fl\u0131klar filan bir ilgin\u00e7. Baz\u0131lar\u0131n\u0131za bu g\u00fczel yo\u011furt tan\u0131d\u0131k geldiyse dilinizin ucundaki s\u00f6zc\u00fc\u011f\u00fc ben s\u00f6yleyeyim. <a title=\"www.doxygen.org\" href=\"http:\/\/www.doxygen.org\" target=\"_blank\">DOXYGEN<\/a>!!! Kanl\u0131ca yo\u011furdunu, pudra \u015fekeri olmadan yemek nas\u0131l tarihi bir hata ise, bir dosyadaki yorumlar\u0131 DOXYGEN'i sallamadan yapmak da o derecede talihsiz bir hatad\u0131r. Nitekim Doxygen ile yazan bir \u00fcstad'\u0131n yo\u011furdu, cam\u0131\u015f yo\u011furdu gibi ta\u015f gibi olacakt\u0131r. Kodu yazan bu b\u00fcy\u00fck \u00fcstad, kodun d\u00f6k\u00fcmantasyonunu da aradan \u00e7\u0131karm\u0131\u015f olacakt\u0131r. \u015eimdi ben Doxygen dedim ama burada onu anlatmayaca\u011f\u0131m. \u00c7\u00fcnk\u00fc tonla kaynak var ve \u00f6\u011frenmek \u00e7ok kolay. Sadece haberiniz yoksa, duyduysan\u0131z ama \u00e7ok \u00f6nemsemediyseniz diye bir de\u011fineyim istedim.\n\n<pre class=\"lang:c decode:true\">#define SAMPLE_C<\/pre>\n\nYukar\u0131daki define sat\u0131r\u0131 da asl\u0131nda yo\u011furttaki zarars\u0131z bir bakteri gibi g\u00f6r\u00fcn\u00fcyor ama asl\u0131nda bu zarars\u0131z bakteri, say\u0131s\u0131z hastal\u0131\u011fa iyi gelir. E\u011fer mod\u00fcler bir tasar\u0131m yapt\u0131ysan\u0131z her bir dosyay\u0131 bir mini mod\u00fcl gibi d\u00fc\u015f\u00fcnmek isteyebilirsiniz. Bu yukar\u0131daki define size, bir mod\u00fcl projenizde var m\u0131 yok mu anlama imkan\u0131 sunar. Ba\u015fka bir kaynak dosyas\u0131nda #ifdef SAMPLE_C diyerekten o varsa \u015funu yap, yoksa da yo\u011furt yapmaktan vazge\u00e7me bunu yap diyebilirsiniz. Bu gibi nice ibret, bu yo\u011furttaki bu bakterinin, faydal\u0131 bir bakteri oldu\u011funu bizlere g\u00f6stermektedir.\n\nDevam edecek olursak, defines &amp; macros k\u0131sm\u0131 g\u00f6r\u00fcr\u00fcz. Bi dakka! Define ifadelerinin h dosyas\u0131nda olmas\u0131 gerekmez mi? Evet ne yaz\u0131k ki yanl\u0131\u015fl\u0131kla koymu\u015fum onu C dosyas\u0131na demeyece\u011fim \u00e7\u00fcnk\u00fc bunun da ibretlik bir sebebi var. baz\u0131 makrolar ya da define'lar, di\u011fer mod\u00fclleri de ilgilendirecek onlar\u0131n da i\u015fine yarayebilecek \u015feyler olduklar\u0131ndan, umuma hizmet a\u00e7\u0131s\u0131ndan bu define'lar h dosyas\u0131na konur. Ama baz\u0131 makrolar, define ifadeleri de vard\u0131r ki, onlar yi\u011fidin yatak odas\u0131 gibidir, d\u0131\u015far\u0131 a\u00e7\u0131lmalar\u0131 ho\u015f olmaz (?). Neyse konuyu sapt\u0131rmayay\u0131m, t\u0131pk\u0131 de\u011fi\u015fkenler ve fonksiyonlar gibi, makrolar\u0131 da d\u0131\u015far\u0131ya a\u00e7mamay\u0131 se\u00e7ebilirsiniz, bu durumda bu makrolar C dosyas\u0131nda tan\u0131mlan\u0131r. \u00a0Mevzuyu daha da uzatmayaca\u011f\u0131m, anlad\u0131n\u0131z siz onu.\n\nDosyan\u0131n geri kalan\u0131n\u0131 \u00e7ok detayl\u0131 a\u00e7\u0131klamayaca\u011f\u0131m. Static olan fonksiyonlar umuma a\u00e7\u0131k olmayan fonksiyonlar oluyor. Yo\u011furdu yemek i\u00e7in i\u00e7indeki bakterilerle tan\u0131\u015f\u0131p \u00e7ay partisi yapmaya gerek yok. Static olan bu fonksiyonlar, mod\u00fcl\u00fcn i\u00e7 meseleleri. Static olmayanlarsa umuma hizmet olarak, d\u0131\u015far\u0131ya a\u00e7\u0131lan elemanlar. Bunlar da yo\u011furdun kayma\u011f\u0131. Static olmayan fonksiyonlar\u0131n prototipleri, h dosyas\u0131nda yer alacak. Fonksiyon prototipini yazmak, derleyiciye \"bak haberin olsun bro, b\u00f6yle bi fonksiyon var sonra duymad\u0131m etmedim deme\" demek oldu\u011fundan, umuma duyurulacak fonksiyonlar\u0131n prototipleri do\u011fal olarak h dosyas\u0131nda yer al\u0131r. Static fonksiyonlar\u0131n prototipleri de c dosyas\u0131nda yer al\u0131r. Static fonksiyon prototipinin h dosyas\u0131nda yer ald\u0131\u011f\u0131 durum da vard\u0131r ve ibretlik bir durumdur ama \u00e7ok \u00e7ok istisnai oldu\u011fundan onu yok saymak hakk\u0131m\u0131zd\u0131r. Nedenleriniz \u00e7ok kuvvetli de\u011filse yapmay\u0131n etmeyin. Kanl\u0131ca yo\u011furdu gibi dosya format\u0131 var. Monalisa tablosunun kopyas\u0131 gibi, al evine duvar\u0131na as.\n\n<strong>Header (Ba\u015fl\u0131k) Dosyas\u0131<\/strong>\n\n<ul>\n    <li>Ba\u015fl\u0131k\u00a0dosyalar\u0131n\u0131n uzant\u0131s\u0131: *.h olmal\u0131d\u0131r. \u00d6rne\u011fin yogurt.h<\/li>\n    <li>Kaynak dosyalar\u0131n\u0131n isimlendirilmesindeki maddeler, 2. maddeden itibaren aynen ge\u00e7erlidir.<\/li>\n<\/ul>\n\n<pre class=\"lang:c decode:true\">#ifndef H_SAMPLE\n#define H_SAMPLE\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                             MODULES USED                               **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n#include \"common.h\"\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                      PUBLIC DEFINITIONS AND MACROS                     **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                      PUBLIC TYPEDEFS AND STRUCTURES                    **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\ntypedef struct\n{\nuint32_t taskIndex;\nMBX_T OwnMbxToken;\n}ts_Sample,*ts_SamplePtr;\n\/****************************************************************************\/\n\/**                                                                        **\/\n\/**                         PUBLIC\/EXPORTED FUNCTIONS                      **\/\n\/**                                                                        **\/\n\/****************************************************************************\/\n\nuint32_t Sample_PublicFunction(void);\n\n#endif \/*H_SAMPLE*\/<\/pre>\n\nYukar\u0131daki ba\u015fl\u0131k dosyas\u0131n\u0131n hikmetlerinin bir \u00e7o\u011funu art\u0131k anlayabiliyorsunuz. Bir tek a\u015fa\u011f\u0131daki k\u0131sm\u0131 a\u00e7\u0131klayay\u0131m:\n\n<pre class=\"lang:default decode:true \">#ifndef H_SAMPLE\n#define H_SAMPLE\n...\n#endif \/*H_SAMPLE*\/<\/pre>\n\nBazen, dostlar; bir kaynak dosyas\u0131 istemeden de olsa ayn\u0131 header dosyas\u0131n\u0131 iki defa \u00e7a\u011f\u0131rabilir. \u00d6rne\u011fin bizim kaynak dosyam\u0131z olan cacik.c, yogurt.h ve hiyar.h'\u0131 include etsin. E\u011fer hem yogurt.h hem de hiyar.h dosyalar\u0131 i\u00e7erde yemek.h dosyas\u0131n\u0131 include ediyorsa, bizim cacik.c asl\u0131nda yemek.h dosyas\u0131n\u0131 iki defa include etmi\u015f olur. Bu da \u00e7ok tats\u0131z bir yo\u011furt yiyi\u015f \u015feklidir ve besin zehirlenmesine sebep olabilir. Bunu engellemek i\u00e7in yukar\u0131daki ifdef yap\u0131s\u0131 kullan\u0131l\u0131r. Bu durumda header dosyas\u0131 iki defa \u00e7a\u011f\u0131r\u0131lsa dahi ilk \u00e7a\u011f\u0131rmada defined olmayan H_SAMPLE, defined olaca\u011f\u0131ndan bir daha bu header dosyas\u0131n\u0131n i\u00e7ine girilmez yani asl\u0131nda bu header iki defa include edilemez. Bu da bir yi\u011fide yak\u0131\u015fan bir yo\u011furt yeme \u015feklidir.\n\nBendeniz, zat-\u0131 alilerinize, dosya formatlar\u0131 hususundaki bak\u0131\u015f\u0131m\u0131 aktard\u0131m. Art\u0131k bunu yorumlamak veya ilerletmek sizlere kalm\u0131\u015f. Yaz\u0131y\u0131 okudu\u011funuz i\u00e7in te\u015fekk\u00fcrler :)\n\n\u015eimdi devam...\n\n[su_button url=\"http:\/\/ozenozkaya.com\/blog\/?p=220\" style=\"3d\"\u00a0icon=\"icon: arrow-circle-o-left\"]\u00d6nceki Sayfa[\/su_button] \u00a0[su_button url=\"http:\/\/ozenozkaya.com\/blog\/?p=248\" style=\"3d\" icon=\"icon: arrow-circle-right\"]Sonraki Sayfa[\/su_button]\n\n&nbsp;","_tr_post_name":"gomulu-sistemler-17-gomulu-c-lezzetli-dosya-formati","_tr_post_excerpt":"","_tr_post_title":"G\u00f6m\u00fcl\u00fc C - 6 : Lezzetli Dosya Format\u0131","_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":[5,6],"class_list":["post-245","post","type-post","status-publish","format-standard","hentry","category-elektronik","category-gomulu-sistemler","tag-elektronik","tag-gomulu-sistemler"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5gWM6-3X","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/245","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=245"}],"version-history":[{"count":0,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/245\/revisions"}],"wp:attachment":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=245"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}