{"id":2377,"date":"2021-11-29T18:46:20","date_gmt":"2021-11-29T18:46:20","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2377"},"modified":"2021-11-29T18:46:20","modified_gmt":"2021-11-29T18:46:20","slug":"haftalik-c-43-fmt-kutuphanesi","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/","title":{"rendered":"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi"},"content":{"rendered":"<p>Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m, k\u0131sa bir aradan sonra, bir s\u00fcredir yaz\u0131l\u0131mlar\u0131mda kulland\u0131\u011f\u0131m ve sizlerin de kullanmas\u0131n\u0131 \u015fiddetle tavsiye etti\u011fim bir k\u00fct\u00fcphaneye derinlemesine g\u00f6z at\u0131yor olaca\u011f\u0131z: {fmt} k\u00fct\u00fcphanesi. Yaz\u0131 uzun, i\u015flecek kabiliyet \u00e7ok o zaman \u00e7ok oyalanmadan ba\u015flayal\u0131m.<\/p>\n<h2 class=\"md-end-block md-heading md-focus\"><strong><span class=\"md-plain md-expand\" style=\"color: #0000ff;\">FMT {fmt} K\u00fct\u00fcphanesi<\/span><\/strong><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">FMT nedir? Geli\u015ftiricisinin a\u011fz\u0131yla bakacak olursak:<\/span><\/p>\n<blockquote>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">{fmt}<\/span><\/strong><\/span><span class=\"md-plain\"> C stdio ve C++ iostream kabiliyetlerine, h\u0131zl\u0131 ve emniyetli bir alternatif sunan a\u00e7\u0131k kaynakl\u0131 bir formatlama k\u00fct\u00fcphanesidir.<\/span><\/p>\n<\/blockquote>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">FMT k\u00fct\u00fcphanesi Victo Zverovich taraf\u0131ndan geli\u015ftirilen bir k\u00fct\u00fcphanedir. Bu k\u00fct\u00fcphaneyi de kapsayacak kabiliyetler, C++ 20 ile birlikte, yeni formatlama k\u00fct\u00fcphanesi olarak geli\u015ftiricilere de sunuldu. K\u00fct\u00fcphanenin g\u00fcnce reposuna a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz:<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/github.com\/fmtlib\/fmt\"><span class=\"md-plain\"><strong><span style=\"color: #008000;\">FMT K\u00fct\u00fcphanesi GitHub Sayfas\u0131<\/span><\/strong><\/span><\/a><\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Detaylara girmeden \u00f6nce isterseniz {fmt}&#8217;ye ili\u015fkin temel kabiliyetleri \u00f6ncelikle bir s\u0131ralayal\u0131m:<\/span><\/p>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Python benzeri modern formatlama yakla\u015f\u0131m\u0131,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Y\u00fcksek performans (<\/span><span style=\"color: #008000;\"><strong><span class=\"md-link md-pair-s\" spellcheck=\"false\"><a style=\"color: #008000;\" href=\"https:\/\/www.zverovich.net\/2020\/06\/13\/fast-int-to-string-revisited.html\">https:\/\/www.zverovich.net\/2020\/06\/13\/fast-int-to-string-revisited.html<\/a><\/span><span class=\"md-plain\">),<\/span><\/strong><\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">A\u00e7\u0131k kaynakl\u0131 bir projedir,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Geni\u015f karakter ve yerelle\u015ftirme deste\u011fi,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">stdio ve iostream&#8217;e g\u00f6re tip emniyeti ve derleme zaman\u0131nda da format kontrol\u00fc sunma,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Kullan\u0131c\u0131 tan\u0131ml\u0131 tipler ile kullan\u0131m,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Y\u00fcksek ta\u015f\u0131nabilirlik. G\u00fcncel s\u00fcr\u00fcm C++ 11&#8217;in temel bir tak\u0131m kabiliyetlerine ihtiya\u00e7 duysa da, C++ 98 i\u00e7in 4.x s\u00fcr\u00fcm\u00fc de halen desteklenmektedir,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">C++ 20 formatlama kabiliyetlerini, C++ 11 ile sunma,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">K\u00fct\u00fcphane ve ba\u015fl\u0131k olarak projelere eklenebilmektedir.<\/span><\/p>\n<\/li>\n<\/ul>\n<h2 class=\"md-end-block md-heading\"><span style=\"color: #0000ff;\"><strong><span class=\"md-plain\">Temel Kullan\u0131m<\/span><\/strong><\/span><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Bu ba\u015fl\u0131k alt\u0131nda {fmt} k\u00fct\u00fcphanesine ili\u015fkin temel kullan\u0131ma bak\u0131yor olaca\u011f\u0131z. Bunu da yaparken \u00f6rnekler \u00fczerinden gidece\u011fiz. \u0130lerleyen sat\u0131rlarda, formatlama ve daha detayl\u0131 hususlara da de\u011finecece\u011fim.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">K\u00fct\u00fcphane ile sunulan temel ba\u015fl\u0131k dosyalar\u0131 ile ba\u015flayal\u0131m. <\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">&#8220;fmt\/core.h&#8221;<\/span><\/strong><\/span><span class=\"md-plain\">, ba\u015fl\u0131k dosyas\u0131 ile temel formatlama, derleme zaman\u0131 kontrolleri ve minimum ba\u011f\u0131ml\u0131l\u0131k ile sunulmaktad\u0131r,<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">&#8220;fmt\/format.h&#8221;<\/span><\/strong><\/span><span class=\"md-plain\">, ba\u015fl\u0131k dosyas\u0131 ile b\u00fct\u00fcn formatlama ve yerelle\u015fitirme kabiliyetleri sunulmaktad\u0131r,<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">&#8220;fmt\/ostream.h&#8221;, &#8220;fmt\/printf.h&#8221;<\/span><\/strong><\/span><span class=\"md-plain\">, ba\u015fl\u0131k dosyalar\u0131 ile printf\/std::ostream deste\u011fi ve ilgili API&#8217;ler sunulmaktad\u0131r.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Bunlar\u0131 sadece ekleyerek kullanabilmek i\u00e7in (&#8220;header only&#8221; kullan\u0131m i\u00e7in), bu ba\u015fl\u0131k dosyalar\u0131ndan \u00f6nce, &#8220;#define FMT_HEADER_ONLY 1&#8221; tan\u0131m\u0131n\u0131 yapman\u0131z gerekiyor.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">FMT k\u00fct\u00fcphanesi API&#8217;leri ve ilgili tipler, <em>fmt<\/em> adres uzay\u0131 i\u00e7erisinde sunulmaktad\u0131r. Bu k\u00fct\u00fcphane ile sunulan temel API&#8217;lere a\u015fa\u011f\u0131daki tablodan ula\u015fabilirsiniz:<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Formatlama API&#8217;leri:<\/span><\/strong><\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">API \u0130smi<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">\u00c7\u0131kt\u0131\/D\u00f6n\u00fc\u015f<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">A\u00e7\u0131klama<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">fmt::format()<\/span><\/strong><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">std::string<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Formatlama \u00e7\u0131kt\u0131s\u0131n\u0131 std::string olarak d\u00f6ner.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">fmt::format_to()<\/span><\/strong><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">fmt::memory_buffer \/ fmt::wmemory_buffer<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Bir \u00f6nceki API&#8217;den farkl\u0131 olarak std::string nesnesi olu\u015fturmadan, bellekte yer alana bir alana \u00e7\u0131kt\u0131y\u0131 yerle\u015ftirir.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">fmt::sprintf()<\/span><\/strong><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">std::string<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">sprintf API&#8217;si kullan\u0131m\u0131na benzer \u015fekilde formatlama yaparak std::string d\u00f6ner. Her ne kadar, bu sprintf formatlamas\u0131 kullan\u0131lsa da, ayn\u0131 \u015fekilde tip emniyeti sunulmakta ve hatal\u0131 kullan\u0131lmakta exception at\u0131l\u0131r.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">\u00c7\u0131kt\u0131 API&#8217;leri:<\/span><\/strong><\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">API \u0130smi<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">\u00c7\u0131kt\u0131\/D\u00f6n\u00fc\u015f<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">A\u00e7\u0131klama<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">fmt::print()<\/span><\/strong><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">stdout \/ dosya(FILE*)<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Formatlama \u00e7\u0131kt\u0131s\u0131n\u0131 standard output&#8217;a ya da dosyaya basar.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">fmt::printf()<\/span><\/strong><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">stdout<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Formatlama \u00e7\u0131kt\u0131s\u0131n\u0131 printf API&#8217;si kullan\u0131m\u0131na benzer \u015fekilde formatlama yaparak standard output&#8217;a basar. Her ne kadar, bu printf formatlamas\u0131 kullan\u0131lsa da, ayn\u0131 \u015fekilde tip emniyeti sunulmakta ve hatal\u0131 kullan\u0131lmakta exception at\u0131l\u0131r.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">fmt::fprintf()<\/span><\/strong><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Dosya (FILE*) \/ stream (std::basic_ostream)<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Bir \u00f6nceki API&#8217;nin dosya sistemine \u00e7\u0131kt\u0131y\u0131 basan halidir.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Bu API&#8217;ler temel olarak iki arg\u00fcman almaktad\u0131rlar: <\/span><span class=\"md-pair-s \"><em><span class=\"md-plain\">fmt<\/span><\/em><\/span><span class=\"md-plain\"> ve <\/span><span class=\"md-pair-s \"><em><span class=\"md-plain\">args<\/span><\/em><\/span><span class=\"md-plain\">. <\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">fmt, g\u00f6sterilecek\/formatlanacak olan metin ve bu metin i\u00e7erisinde kullan\u0131lacak olan de\u011fi\u015ftirilebilir alanlardan olu\u015fan ({} i\u00e7erisinde) stringdir. args, ise formatlanarak {} ile belirtilen alanlara ge\u00e7irilecek nesnelerdir. \u015eimdi bu API&#8217;lerden birinin (fmt::format) tan\u0131m\u0131na bakal\u0131m:<\/span><\/p>\n<pre class=\"lang:c++ decode:true\">template&lt;typename ...T&gt; \r\nauto fmt::format(format_string&lt;T...&gt; fmt, T&amp;&amp;... args) -&gt; std::string<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Bu noktadan sonra, fmt::print&#8217;i kullan\u0131yor olaca\u011f\u0131m, bunun yerine ayn\u0131 \u015fekilde fmt::format da kullanabilirsiniz.<\/span><\/p>\n<div class=\"md-hr md-end-block\" tabindex=\"-1\">\n<hr \/>\n<\/div>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Parantez Yer De\u011fi\u015ftirme Alanlar\u0131:<\/span><\/strong><\/span><span class=\"md-plain\"> \u00c7ok fazla oyalanmadan hemen kullan\u0131ma ge\u00e7ebiliriz. \u00d6ncelikle, formatlamak i\u00e7in verdi\u011finiz metinler i\u00e7erisindeki formatlanacak alanlar <\/span><span class=\"md-pair-s \"><strong><span class=\"md-plain\">{}<\/span><\/strong><\/span><span class=\"md-plain\"> ile ifade edilir:<\/span><\/p>\n<pre class=\"lang:c++ decode:true md-fences md-end-block ty-contain-cm modeLoaded\"> \/\/ \u00c7\u0131kt\u0131: \"Simdi buraya basacagimiz sayi: 42.\"\r\nfmt::print(\"Simdi buraya basacagimiz sayi: {}.\", 42);<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Hemen akl\u0131n\u0131za \u015fu gelebilir. Sevgili yaz\u0131l\u0131mperver, ben metin i\u00e7erisinde { veya } kullanmak istersem ne yapaca\u011f\u0131m? \u015eunu yapacaks\u0131n\u0131z, \u00f6n\u00fcne ayn\u0131nda bir dane daha ekleyece\u011fiz. \u00d6r. {{ ya da }} gibi \ud83d\ude09<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Parantez kullan\u0131m\u0131n\u0131n bir di\u011fer g\u00fczelli\u011fi de, \u00f6zel formatlama yapmad\u0131\u011f\u0131n\u0131z m\u00fcddet\u00e7e, temel tipler i\u00e7in cout kullan\u0131m\u0131na benzer bir \u015fekilde kullanabilirsiniz. Hemen bakal\u0131m<\/span><\/p>\n<pre class=\"lang:c++ decode:true\">printf(\"%d\", my_int);\r\nprintf(\"%lld\", my_long_long);\r\nprintf(\"%\" PRIu64, my_int64);\r\n\r\n\/\/ Yukar\u0131dakiler yerine, a\u015fa\u011f\u0131dakilerini kullanabilirsiniz. Her biri i\u00e7in \u00f6zel bir formatlama girdisine ihtiyac\u0131n\u0131z olmaz\r\nfmt::format(\"{}\", my_int);\r\nfmt::format(\"{}\", my_long_long);\r\nfmt::format(\"{}\", my_int64);<\/pre>\n<div class=\"md-hr md-end-block\" tabindex=\"-1\">\n<hr \/>\n<\/div>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Konumsal Arg\u00fcmanlar:<\/span><\/strong><\/span><span class=\"md-plain\"> Bildi\u011finiz \u00fczere printf ve iostream ile bir arg\u00fcman\u0131 birden fazla kullanma veya arg\u00fcman olarak verdi\u011finiz s\u0131radan farkl\u0131 bir \u015fekilde kullanma \u015fans\u0131na sahip de\u011fildiniz. Bu her ne kadar basit formatlama kullan\u0131mlar\u0131nda s\u0131k\u0131nt\u0131 olmasa da, karma\u015f\u0131k ya da tekrarl\u0131 kullan\u0131mlarda hakikaten yorucu olabiliyor. fmt bu anlamda g\u00fc\u00e7l\u00fc. Hemen \u00f6rnek \u00fczerinden gidelim:<\/span><\/p>\n<pre class=\"lang:c++ decode:true\">fmt::print(\"\u0130mdi bana ilk degil de ikinci argumani ver {1} sonra ilkini ver {0}. Sonra bir daha ikiniciyi {1} ver.\", \"ilkArg\", 12);\r\n\/\/ \u00c7\u0131kt\u0131: \"Smdi bana ilk degil de ikinci argumani ver 12 sonra ilkini ver ilkArg. Sonra bir daha ikiniciyi 12 ver.\"<\/pre>\n<div class=\"md-hr md-end-block\" tabindex=\"-1\">\n<hr \/>\n<\/div>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">\u0130simlendirilmi\u015f Arg\u00fcmanlar:<\/span><\/strong><\/span><span class=\"md-plain\"> Ben say\u0131lar, s\u0131ralar ile u\u011fra\u015famam, arg\u00fcmanlar\u0131 isimlendirmek istiyorum derseniz. O da mevcut, fakat bunun bir maliyeti olaca\u011f\u0131n\u0131 da unutmay\u0131n. Benzer \u015fekilde, isimlendirilmi\u015f arg\u00fcmanlar\u0131 da birden fazla yerde kullanabilirsiniz. Bu ama\u00e7lar <\/span><span class=\"md-pair-s \"><strong><span class=\"md-plain\">fmt::arg(argumanIsmi, argumanDegeri)<\/span><\/strong><\/span><span class=\"md-plain\"> fonksiyonunu kullanabilirsiniz. Hemen \u00f6rne\u011fe bakal\u0131m.<\/span><\/p>\n<pre class=\"lang:c++ decode:true \">fmt::display(\"[{id}] {lastName}, {firstName}\",\r\n             fmt::arg(\"id\", 42), fmt::arg(\"firstName\", \"John\"),\r\n             fmt::arg(\"lastName\", \"Doe\"));\r\n\/\/ \u00c7\u0131kt\u0131: [42] Doe, John<\/pre>\n<div class=\"md-hr md-end-block\" tabindex=\"-1\">\n<hr \/>\n<\/div>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Formatlama:<\/span><\/strong><\/span><span class=\"md-plain\"> Art\u0131k biraz formatlaman\u0131n detaylar\u0131na girebiliriz, bunun i\u00e7in de sunulan kabiliyetleri i\u00e7erisinde bar\u0131nd\u0131ran ve geli\u015ftiricisinin verdi\u011fi bir \u00f6rnek ile ba\u015flayal\u0131m. A\u015fa\u011f\u0131daki kod ile asl\u0131nda formatlama nam\u0131na, bu k\u00fct\u00fcphane ile neler yapabileceklerinizi (ya da g\u00fcnl\u00fck geli\u015ftirme faaliyetlerinizde) topluca g\u00f6rebilirsiniz. Formatlama tan\u0131mlamas\u0131, : noktadan sonra yap\u0131l\u0131yor.<\/span><\/p>\n<pre class=\"lang:c++ decode:true \">fmt::print(\"{:*^10.2f}\", 1.2345);<\/pre>\n<p>&nbsp;<\/p>\n<p id=\"wChLbRH\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2380 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc.png\" alt=\"\" width=\"563\" height=\"265\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc.png 1329w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-300x141.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-1024x482.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-768x362.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-500x236.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-150x71.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-1200x565.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-400x188.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-800x377.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a5123455bcc-200x94.png 200w\" sizes=\"auto, (max-width: 563px) 100vw, 563px\" \/><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Ne der yukar\u0131daki kullan\u0131m? <\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u015eunu der: 1.2345 kayan say\u0131s\u0131n\u0131, sabit noktal\u0131 g\u00f6sterim (presentation), noktadan sonra 2 rakam \u00e7\u00f6z\u00fcn\u00fcrl\u00fckle yuvarla (precision) ve 10 karakter geni\u015flik (width) i\u00e7erisinde merkeze hizala (alignment) ve kalan bo\u015fluklar\u0131 da * ile doldur (fill).<\/span><\/p>\n<p>Peki \u00e7\u0131kt\u0131s\u0131 nedir: &#8220;<strong>***1.23***<\/strong>&#8221;<\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Evet, zehri verdikten sonra \u015fimdi, formatlama kullan\u0131m\u0131na biraz daha e\u011filebiliriz.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">fmt i\u00e7in verdi\u011finiz metinler i\u00e7erisindeki, yer de\u011fi\u015ftirme alanlar\u0131 d\u0131\u015f\u0131ndaki k\u0131s\u0131mlar aynen \u00e7\u0131kt\u0131ya yans\u0131t\u0131l\u0131r. Parantez i\u00e7erisindeki k\u0131s\u0131m <\/span><span class=\"md-pair-s \"><strong><span class=\"md-plain\">:<\/span><\/strong><\/span><span class=\"md-plain\"> ile ayr\u0131l\u0131yor. Bunlar arg\u00fcman tan\u0131mlay\u0131c\u0131s\u0131 ve formatlama spesifikasyonudur: <\/span><\/p>\n<p class=\"md-end-block md-p\" style=\"text-align: center;\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">{arg\u00fcman tan\u0131mlay\u0131c\u0131s\u0131 : formatlama spesifikasyonu}<\/span><\/strong><\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Parantez i\u00e7erisindeki iki k\u0131s\u0131m da bo\u015f b\u0131rak\u0131labilir. \u0130ki nokta sadece formatlama spesifikasyonu oldu\u011fu durumda eklenmelidir. \u015eimdi birka\u00e7 \u00f6rme\u011fe bakal\u0131m.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Ge\u00e7erli kullan\u0131mlar: <\/span><\/p>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{}, bir sonraki arg\u00fcman\u0131, tipine g\u00f6re kullan\u0131r,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">, bir sonraki arg\u00fcman\u0131, tipine g\u00f6re kullan\u0131r (: biraz fazladan),<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{0}, ilk arg\u00fcman\u0131, tipine g\u00f6re kullan\u0131r, <\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{argumanIsmi}, argumanIsmi isimli arg\u00fcman\u0131, tipine g\u00f6re kullan\u0131r, <\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{argumanNumarasi}, argumanNumarasi s\u0131ras\u0131ndaki arg\u00fcman\u0131, tipine g\u00f6re kullan\u0131r, <\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{:*^10.2f}, sonraki arg\u00fcman\u0131, yukar\u0131da belirtti\u011fim \u015fekilde formatlar,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{3:*^10.2f}, 4. arg\u00fcman\u0131, yukar\u0131da belirtti\u011fim \u015fekilde formatlar.<\/span><\/p>\n<\/li>\n<\/ul>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Ge\u00e7ersiz kullan\u0131mlar: <\/span><\/p>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{#:}, iki noktadan \u00f6nce ya numara, ya arg\u00fcman ismi ya da hi\u00e7 bir \u015fey olmal\u0131,<\/span><\/p>\n<\/li>\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{*^10.2f}, formatlaman\u0131n yap\u0131labilmesi i\u00e7in iki nokta kullan\u0131lmal\u0131.<\/span><\/p>\n<\/li>\n<\/ul>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u015eimdi ortaya kar\u0131\u015f\u0131k bir ka\u00e7 \u00f6rne\u011fe bakal\u0131m:<\/span><\/p>\n<pre class=\"lang:c++ decode:true md-fences md-end-block ty-contain-cm modeLoaded\">fmt::print(\"0X{:X}\", 42); \/\/ \"0X2A\" basar, 16'lik gosterim\r\nfmt::print(\"{:#X}\", 42); \/\/ \"0X2A\" basar, 16'lik gosterim\r\nfmt::print(\"{0:5}\", 42); \/\/ \"   42\" basar, sabit geni\u015flik\r\nfmt::print(\"{2:{3}}\", \"gereksizArguman\", \"bu da oyle\", 42, 7); \/\/ \"     42\" basar, dinamik (baska b\u0131r arguman kullanarak) geni\u015flik\r\nfmt::print(\"{0:.3}\", 1.234); \/\/ \"1.23\" basar, \u00e7\u00f6z\u00fcnr\u00fcl\u00fck\r\nfmt::print(\"{2:.{3}}\", \"gereksizArguman\", \"bu da oyle\", 1.234, 3); \/\/ \"1.23\" basar, dinamik (baska bir arguman kullanarak) \u00e7\u00f6z\u00fcnr\u00fcl\u00fck\r\nfmt::print(\"{:&lt;10}\", \"left\"); \/\/ \"left      \" basar\r\nfmt::print(\"{:&gt;10}\", \"right\"); \/\/ \"     right\" basar\r\nfmt::print(\"{:^10}\", \"centered\"); \/\/ \" centered \" basar\r\nfmt::print(\"{:-^14}\", \"centered\"); \/\/ \"---centered---\" basar<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Mevcut printf formatlamalar\u0131n\u0131n uyarlanmas\u0131:<\/span><\/strong><\/span><span class=\"md-plain\"> Diyelim ki elimizde haz\u0131r printf kullan\u0131mlar\u0131 var, bunlar\u0131 h\u0131zl\u0131ca fmt k\u00fct\u00fcphanesine nas\u0131l aktarabiliriz? Asl\u0131nda \u00e7ok zor de\u011fil, %&#8217;i silip : koyman\u0131z yeterli. Elbette etraf\u0131na {} koymay\u0131 unutmuyoruz. Hemen bir \u00f6rne\u011fe bakal\u0131m:<\/span><\/p>\n<pre class=\"lang:c++ decode:true md-fences md-end-block ty-contain-cm modeLoaded\">printf(\"%05.2f\", 1.234); \u00a0 \/\/ 01.23 basar fmt::print(\"{:05.2f}\", 1.234); \u00a0\/\/ 01.23 basar<\/pre>\n<div class=\"md-hr md-end-block\" tabindex=\"-1\">\n<hr \/>\n<\/div>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Dosyaya\/Standart Hata Alan\u0131na \u00c7\u0131kt\u0131:<\/span><\/strong><\/span><span class=\"md-plain\"> Komut sat\u0131r\u0131na bast\u0131k, peki dosyaya da basabilir miyiz? Elbette hemen bir ka\u00e7 \u00f6rne\u011fe bakal\u0131m:<\/span><\/p>\n<pre class=\"lang:c++ decode:true md-fences mock-cm md-end-block\">fmt::print(stderr\/FILE*, \"System error code = {}\\n\", errno); \/\/ standart hata dosya tan\u0131mlay\u0131c\u0131s\u0131na basar<\/pre>\n<div class=\"md-hr md-end-block\" tabindex=\"-1\">\n<hr \/>\n<\/div>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Belle\u011fe \u00c7\u0131kt\u0131:<\/span><\/strong><\/span><span class=\"md-plain\"> \u015eimdiye kadar hep komut sat\u0131r\u0131 ve std::string olarak formatlanm\u0131\u015f \u00e7\u0131kt\u0131lar\u0131 elde edebilece\u011fimiz s\u00f6ylemi\u015ftik. Bunun yan\u0131nda, baz\u0131 durumlarda, formatlanm\u0131\u015f verileri bellekte de tutmak isteyebilirsiniz. \u00d6zellikle k\u0131s\u0131tl\u0131 bellek kullan\u0131mlar\u0131nda ya da \u00e7\u0131kt\u0131lar\u0131n farkl\u0131 yerler ile payla\u015f\u0131lmas\u0131 ihtiya\u00e7lar\u0131 i\u00e7in fmt k\u00fct\u00fcphanesi buna ili\u015fkin de API&#8217;ler sunmaktad\u0131r. Hemen bir \u00f6rnek ile bu kabiliyete g\u00f6z at\u0131yor olal\u0131m.<\/span><\/p>\n<pre class=\"lang:c++ decode:true md-fences mock-cm md-end-block\">fmt::memory_buffer buf;\r\nfmt::format_to(buf, \"[{0}] {2}, {1}\", 42, \"John\", \"Doe\"); \/\/ buf i\u00e7erisine ilgili \u00e7\u0131kt\u0131y\u0131 yerle\u015ftiriyor\r\nstd::cout &lt;&lt; buf.data() &lt;&lt; '\\n';<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Yukar\u0131daki kullan\u0131mda, dinamik bellek kullan\u0131m\u0131na ihtiya\u00e7 bulunmuyor ve bellek boyutunu belirtmenize de ihtiya\u00e7 kalm\u0131yor.<\/span><\/p>\n<h2 class=\"md-end-block md-heading\"><span class=\"md-pair-s \" style=\"color: #0000ff;\"><strong><span class=\"md-plain\">Formatlama Grameri<\/span><\/strong><\/span><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u0130lgili olanlar\u0131n\u0131z i\u00e7in formatlama gramerine de elbette bakaca\u011f\u0131z. Asl\u0131na bakarsan\u0131z, sizlere tavsiyem, grameri anlamaya biraz vakit ay\u0131rman\u0131z. Bu sayede neler yapabilece\u011finize ili\u015fkin ufkunuz olduk\u00e7a geni\u015fleyecektir. \u00d6ncelikle yer de\u011fi\u015ftirme alan\u0131n\u0131 (replacement_field) tan\u0131mlayal\u0131m:<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"assembly\" cid=\"n134\" mdtype=\"fences\">replacement_field ::=  \"{\" [arg_id] [\":\" (format_spec | chrono_format_spec)] \"}\"\r\narg_id            ::=  integer | identifier\r\ninteger           ::=  digit+\r\ndigit             ::=  \"0\"...\"9\"\r\nidentifier        ::=  id_start id_continue*\r\nid_start          ::=  \"a\"...\"z\" | \"A\"...\"Z\" | \"_\"\r\nid_continue       ::=  id_start | digit<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Sonra da, formatlama spesifikasyonuna bakabiliriz:<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"assembly\" cid=\"n136\" mdtype=\"fences\">format_spec ::=  [[fill]align][sign][\"#\"][\"0\"][width][\".\" precision][\"L\"][type]\r\nfill        ::=  &lt;a character other than '{' or '}'&gt;\r\nalign       ::=  \"&lt;\" | \"&gt;\" | \"^\"  \r\nsign        ::=  \"+\" | \"-\" | \" \"\r\nwidth       ::=  integer | \"{\" [arg_id] \"}\"\r\nprecision   ::=  integer | \"{\" [arg_id] \"}\"\r\ntype        ::=  \"a\" | \"A\" | \"b\" | \"B\" | \"c\" | \"d\" | \"e\" | \"E\" | \"f\" | \"F\" | \"g\" | \"G\" |\r\n                 \"o\" | \"p\" | \"s\" | \"x\" | \"X\"<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Hizalama opsiyonlar\u0131na bakal\u0131m:<\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">Opsiyon<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Anlam\u0131<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'&lt;'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Sola hizalar, \u00e7o\u011fu nesne i\u00e7in varsay\u0131lan hizalama budur.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'&gt;'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Sa\u011fa hizalar, <\/span><span class=\"md-pair-s \"><strong><span class=\"md-plain\">say\u0131lar i\u00e7in varsay\u0131lan hizalama budur<\/span><\/strong><\/span><span class=\"md-plain\">.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'^'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Merkeze hizalar.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u0130\u015faret (sign) opsiyonlar\u0131na bakal\u0131m:<\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">Opsiyon<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Anlam\u0131<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'+'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Hem pozitif hem negatif say\u0131lar i\u00e7in i\u015faretleri kullan.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'-'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Sadece negatif say\u0131lar i\u00e7in i\u015fareti kullan. <\/span><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Say\u0131lar i\u00e7in varsay\u0131lan davran\u0131\u015f budur.<\/span><\/strong><\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">bo\u015fluk &#8216; &#8216;<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Pozitif say\u0131lar i\u00e7in \u00f6n taraf bo\u015fluk, negatif say\u0131lar i\u00e7in ise i\u015faret.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u015eimdi tip opsiyonlar\u0131na bakal\u0131m. Metin g\u00f6sterim tipleri:<\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">Tip<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Anlam<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'s'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">String format\u0131. B\u00fct\u00fcn metinler i\u00e7in varsay\u0131lan formatt\u0131r.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">Tip Tan\u0131mlay\u0131c\u0131 Yok \u0130se<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'s'<\/code> ile ayn\u0131.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Karakter tip g\u00f6sterim tipleri:<\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">Tip<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Anlam<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'c'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Karakter format\u0131. Karakter veri yap\u0131lar\u0131 i\u00e7in varsay\u0131lan formatt\u0131r.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">Tip Tan\u0131mlay\u0131c\u0131 Yok \u0130se<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'c'<\/code>ile ayn\u0131.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u00d6ncelikle tam say\u0131lar:<\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">Tip<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Anlam<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'b'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Binary format. Say\u0131lar\u0131 2&#8217;lik say\u0131 sistemine g\u00f6re formatlar, &#8220;#&#8221; ile birlikte kullan\u0131l\u0131rsa, say\u0131n\u0131n \u00f6n\u00fcne &#8220;0b&#8221; ekler<\/span><span class=\"md-plain\">.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'B'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Binary format. Say\u0131lar\u0131 2&#8217;lik say\u0131 sistemine g\u00f6re formatlar, &#8220;#&#8221; ile birlikte kullan\u0131l\u0131rsa, say\u0131n\u0131n \u00f6n\u00fcne &#8220;0B&#8221; ekler<\/span><span class=\"md-plain\">.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'c'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Karakter olarak basar.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'d'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">Tam say\u0131. Say\u0131y\u0131 10&#8217;luk d\u00fczene g\u00f6re formatlar.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'o'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">8 li format. Say\u0131y\u0131 8&#8217;lik say\u0131 d\u00fczenine g\u00f6re formatlar.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'x'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">16&#8217;l\u0131k say\u0131 format\u0131. Say\u0131s\u0131 16&#8217;l\u0131k formatta basar ve 9 dan b\u00fcy\u00fck harfleri k\u00fc\u00e7\u00fck basar, &#8220;#&#8221; ile birlikte kullan\u0131l\u0131rsa, say\u0131n\u0131n \u00f6n\u00fcne &#8220;0x&#8221; ekler.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'X'<\/code><\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">16&#8217;l\u0131k say\u0131 format\u0131. Say\u0131s\u0131 16&#8217;l\u0131k formatta basar ve 9 dan b\u00fcy\u00fck harfleri b\u00fcy\u00fck basar, &#8220;#&#8221; ile birlikte kullan\u0131l\u0131rsa, say\u0131n\u0131n \u00f6n\u00fcne &#8220;0X&#8221; ekler.<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">Tip Tan\u0131mlay\u0131c\u0131 Yok \u0130se<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'d'<\/code>ile ayn\u0131.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Kayan say\u0131lar i\u00e7in tip opsiyonlar\u0131:<\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">Tip<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Anlam<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'a'<\/code><\/span><\/span><\/td>\n<td>Onalt\u0131l\u0131k kayan nokta bi\u00e7imi. Say\u0131y\u0131 16 taban\u0131nda &#8220;0x&#8221; \u00f6neki ve 9&#8217;un \u00fczerindeki rakamlar i\u00e7in k\u00fc\u00e7\u00fck harflerle yazd\u0131r\u0131r. \u00dcsl\u00fc belirtmek i\u00e7in &#8216;p&#8217; kullan\u0131r.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'A'<\/code><\/span><\/span><\/td>\n<td>\u00d6nek i\u00e7in b\u00fcy\u00fck harfler, 9&#8217;un \u00fczerindeki rakamlar ve \u00fcss\u00fc belirtmek i\u00e7in kullan\u0131lmas\u0131 d\u0131\u015f\u0131nda &#8216;a&#8217; ile ayn\u0131d\u0131r.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'e'<\/code><\/span><\/span><\/td>\n<td>\u00dcs g\u00f6sterimi. \u00dcss\u00fc belirtmek i\u00e7in &#8216;e&#8217; harfini kullanarak say\u0131y\u0131 bilimsel g\u00f6sterimde yazd\u0131r\u0131r.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'E'<\/code><\/span><\/span><\/td>\n<td>\u00dcs g\u00f6sterimi. Ay\u0131r\u0131c\u0131 karakter olarak b\u00fcy\u00fck harfli bir &#8216;E&#8217; kullanmas\u0131 d\u0131\u015f\u0131nda &#8216;e&#8217; ile ayn\u0131d\u0131r.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'f'<\/code><\/span><\/span><\/td>\n<td>Sabit noktal\u0131 say\u0131.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'F'<\/code><\/span><\/span><\/td>\n<td>Sabit nokta. &#8216;f&#8217; ile ayn\u0131d\u0131r, ancak nan&#8217;\u0131 NAN&#8217;a ve inf&#8217;yi INF&#8217;ye d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'g'<\/code><\/span><\/span><\/td>\n<td>Genel bi\u00e7im. Belirli bir p &gt;= 1 kesinli\u011fi i\u00e7in, bu, say\u0131y\u0131 p anlaml\u0131 basama\u011fa yuvarlar ve ard\u0131ndan sonucu b\u00fcy\u00fckl\u00fc\u011f\u00fcne ba\u011fl\u0131 olarak ya sabit nokta bi\u00e7iminde ya da bilimsel g\u00f6sterimde bi\u00e7imlendirir. 1.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'G'<\/code><\/span><\/span><\/td>\n<td>Genel bi\u00e7im. Say\u0131 \u00e7ok b\u00fcy\u00fcrse &#8216;E&#8217;ye ge\u00e7mesi d\u0131\u015f\u0131nda &#8216;g&#8217; ile ayn\u0131d\u0131r. Sonsuzluk ve NaN temsilleri de b\u00fcy\u00fck harfle yaz\u0131lm\u0131\u015ft\u0131r.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">Tip Tan\u0131mlay\u0131c\u0131 Yok \u0130se<\/span><\/span><\/td>\n<td>Varsay\u0131lan kesinli\u011fin, belirli bir de\u011feri temsil etmek i\u00e7in gerekti\u011fi kadar y\u00fcksek olmas\u0131 d\u0131\u015f\u0131nda, &#8216;g&#8217;ye benzer.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u0130\u015faret\u00e7iler i\u00e7in tip opsiyonlar\u0131:<\/span><\/p>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">Tip<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Anlam<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'p'<\/code><\/span><\/span><\/td>\n<td>\u0130\u015faret\u00e7i bi\u00e7imi. Bu, i\u015faret\u00e7iler i\u00e7in varsay\u0131lan t\u00fcrd\u00fcr ve atlanabilir.<\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">Tip Tan\u0131mlay\u0131c\u0131 Yok \u0130se<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-pair-s\" spellcheck=\"false\"><code>'p'<\/code> ile ayn\u0131<\/span><span class=\"md-plain\">.<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2 class=\"md-end-block md-heading\"><strong><span class=\"md-plain\" style=\"color: #0000ff;\">Kullan\u0131c\u0131 Tiplerinin Formatlanmas\u0131<\/span><\/strong><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">fmt k\u00fct\u00fcphanesinin sundu\u011fu bir di\u011fer g\u00fczellik de, var olan s\u0131n\u0131f\/veri yap\u0131lar\u0131n\u0131z\u0131 da, basit bir formatlay\u0131c\u0131 yard\u0131m\u0131 ile bu k\u00fct\u00fcphanede kullan\u0131labilir hale getirebilirsiniz. Hemen bir \u00f6rne\u011fe bakal\u0131m. \u00d6ncelikle bir veri yap\u0131s\u0131 tan\u0131mlayal\u0131m:<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n261\" mdtype=\"fences\">struct Material\r\n{\r\n    int         Id;\r\n    double      Weight;\r\n    std::string Name;     \r\n};<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Veri yap\u0131m\u0131z\u0131 tamamlad\u0131k. \u015eimdi, bu veri yap\u0131m\u0131z\u0131 fmt k\u00fct\u00fcphanesinin anlamland\u0131rabilmesi i\u00e7in gerekli kabiliyetleri tan\u0131mlayal\u0131m.<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n263\" mdtype=\"fences\">template&lt;&gt;\r\nstruct fmt::formatter&lt;Material&gt;\r\n{\r\n    template &lt;typename ParseContext&gt;\r\n    constexpr auto parse(ParseContext&amp; ctx) { return ctx.begin(); }\r\n\r\n    template &lt;typename FormatContext&gt;\r\n    auto format(Material const&amp; material, FormatContext&amp; ctx)\r\n    {\r\n    \treturn fmt::format_to(ctx.out(), \"Name: {1} (Id:{0}). Weight: {2:^6.3f} gr\", material.Id, material.Name, material.Weight);\r\n    }\r\n};<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Evet gelelim finale. Bu veri yap\u0131s\u0131n\u0131 nas\u0131l g\u00f6r\u00fcnteleyebiliriz:<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n265\" mdtype=\"fences\">Material gold { 102, 13.456789, \"Gold\" };\r\nfmt::print(\"{}\\n\", gold);\r\n\r\n\/\/ \u00c7\u0131kt\u0131s\u0131: \"Name: Gold (Id:102). Weight: 13.457 gr\"<\/pre>\n<h2 class=\"md-end-block md-heading\"><span class=\"md-plain\">Zaman Formatlama<\/span><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Yukar\u0131da bir \u00e7ok farkl\u0131 formatlama \u00f6rne\u011fin bakt\u0131ktan sonra \u015fimdi biraz da, tarih ve saat \u00e7\u0131kt\u0131lar\u0131n\u0131 nas\u0131l formatlayabilece\u011fimize bakaca\u011f\u0131z.<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n268\" mdtype=\"fences\">std::time_t t = std::time(nullptr);\r\nfmt::print(\"Today is {:%Y-%m-%d}\\n\", *std::localtime(&amp;t)); \/\/ Today is 2021-11-23\r\n\r\nstd::time_t t = std::time(nullptr);\r\n\r\nfmt::print(\"The date is {:%Y-%m-%d}.\", fmt::localtime(t)); \/\/\"The date is 2021-11-23.\" (with the current date):<\/pre>\n<h2 class=\"md-end-block md-heading\"><span class=\"md-plain\">Renklendirme<\/span><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">fmt k\u00fct\u00fcphanesinin bir di\u011fer g\u00fczel \u00f6zelli\u011fi de, fmt\/color.h ba\u015fl\u0131k dosyas\u0131n\u0131 ekleyerek ve basit bir g\u00fcncelleme ile, print API&#8217;siyle komut sat\u0131r\u0131na renkli, italik ve alt\u0131 \u00e7izili metinler basabilmeniz. Hemen \u00f6rne\u011fe bakal\u0131m. Burada, \u015funu belirtmekte fayda var, italik ve bold g\u00f6sterim i\u00e7in kulland\u0131\u011f\u0131n\u0131z terminalin de bunu destekliyor olmas\u0131 laz\u0131m:<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n271\" mdtype=\"fences\">#include &lt;fmt\/color.h&gt;\r\n\r\nint main() {\r\n  fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold,\r\n             \"Hello, {}!\\n\", \"world\");\r\n  fmt::print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) |\r\n             fmt::emphasis::underline, \"Hello, {}!\\n\", \"world\");\r\n  fmt::print(fg(fmt::color::steel_blue) | fmt::emphasis::italic,\r\n             \"Hello, {}!\\n\", \"world\");\r\n}<\/pre>\n<h2 class=\"md-end-block md-heading\"><span class=\"md-plain\">Emniyet <\/span><\/h2>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n273\" mdtype=\"fences\">int x = 42;\r\nprintf(\"%2s\\n\", x);<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Kod sat\u0131r\u0131n\u0131 derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda ne olur? \u00c7o\u011fu modern derleyici bu tarz bir kullan\u0131m g\u00f6rd\u00fc\u011f\u00fcnde sizleri derleme zaman\u0131nda uyar\u0131r. E\u011fer uyarm\u0131yorsa -Wformat veya muadili ayar\u0131 kontrol etmenizde fayda var. Sonu\u00e7 olarak \u00e7o\u011fu durumda yaz\u0131l\u0131m\u0131n\u0131z\u0131n istemsiz bir \u015fekilde kapand\u0131\u011f\u0131n\u0131 g\u00f6receksiniz.<\/span><\/p>\n<pre class=\"lang:c++ decode:true \">warning C4313: 'printf': '%s' in format string conflicts with argument 1 of type 'int'<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">ya da<\/span><\/p>\n<pre class=\"lang:c++ decode:true \">warning: format \u2018%d\u2019 expects argument of type \u2018int\u2019, but argument 2 has type \u2018char *\u2019 [-Wformat=]<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Bunun yan\u0131nda, fmt <\/span><span class=\"md-pair-s \"><strong><span class=\"md-plain\">\u00e7al\u0131\u015fma zaman\u0131nda<\/span><\/strong><\/span><span class=\"md-plain\"> baz\u0131 kontroller yapar. Olas\u0131 hatalarda da, &#8220;exception&#8221; f\u0131rlat\u0131l\u0131r. <\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Hatal\u0131 arg\u00fcman indeksi giri\u015fi:<\/span><\/strong><\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n280\" mdtype=\"fences\">try\r\n{\r\n     fmt::print(\"[{}] {}, {}\\n\", 42, \"Doe\"); \/\/ \u00fc\u00e7\u00fcnc\u00fc {} s\u0131k\u0131nt\u0131l\u0131\r\n}\r\ncatch (fmt::format_error const&amp; e)\r\n{\r\n     fmt::print(\"{}\\n\", e.what()); \/\/ \"argument not found\" hatas\u0131\r\n}\r\n\r\ntry\r\n{\r\n     fmt::print(\"[{3}] {}\\n\", 42, \"Doe\"); \/\/  {3} mevcut de\u011fil\r\n}\r\ncatch (fmt::format_error const&amp; e)\r\n{\r\n     fmt::print(\"{}\\n\", e.what()); \/\/ \"argument not found\" hatas\u0131\r\n}<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Hatal\u0131 tip tan\u0131mlay\u0131c\u0131s\u0131:<\/span><\/strong><\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n282\" mdtype=\"fences\">try\r\n{\r\n    fmt::print(\"Cevap sayi olmali {:d}\", \"k\u0131rk iki\");\r\n}\r\ncatch (fmt::format_error const&amp; e)\r\n{\r\n    fmt::print(\"{}\\n\", e.what());  \/\/ \"invalid type specifier\" hatas\u0131\r\n}\r\n\r\ntry\r\n{\r\n    fmt::print(\"Cevap metin olmali {:s}\", 42);\r\n}\r\ncatch (fmt::format_error const&amp; e)\r\n{\r\n    fmt::print(\"{}\\n\", e.what());  \/\/ \"invalid type specifier\" hatas\u0131\r\n}<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Ba\u015fta da bahsetti\u011fim gibi, fmt k\u00fct\u00fcphanesi <strong>derleme zaman\u0131nda<\/strong> da baz\u0131 kontroller yap\u0131yor. Bunlar genel format\u0131n do\u011frulu\u011funu derleme zaman\u0131nda, \u00e7e\u015fitli hatalar ile size sunar. Burada, main.cpp (119) ile asl\u0131nda hatal\u0131 kullan\u0131m\u0131n oldu\u011fu sat\u0131r g\u00f6sterilmektedir.<\/span><\/p>\n<pre class=\"lang:c++ decode:true md-fences mock-cm md-end-block \">fmt::print(FMT_STRING(\"Cevap sayi olmaliydi {:d}\"), \"kirk iki\");\r\n\r\n\/\/ Yukar\u0131daki sat\u0131r asagidaki hatay\u0131 size derleme zaman\u0131nda verir\r\n\\fmt-master\\include\\fmt\\core.h(2728,37): error C2131: expression did not evaluate to a constant\r\n\\fmt-master\\include\\fmt\\core.h(2576,31): message : failure was caused by call of undefined function or one not declared 'constexpr'\r\n\\fmt-master\\include\\fmt\\core.h(2576,31): message : see usage of 'fmt::v8::detail::error_handler::on_error'\r\n\\fmt-master\\include\\fmt\\core.h(2848): message : see reference to function template instantiation 'void fmt::v8::detail::check_format_string&lt;const char(&amp;)[9],S,0&gt;(S)' being compiled\r\n     with\r\n     [\r\n         S=main::&lt;lambda_25da53a982e860e05e523c13e643a462&gt;::()::FMT_COMPILE_STRING\r\n     ]\r\n\\main.cpp(119): message : see reference to function template instantiation 'fmt::v8::basic_format_string&lt;char,const char (&amp;)[9]&gt;::basic_format_string&lt;main::&lt;lambda_25da53a982e860e05e523c13e643a462&gt;::()::FMT_COMPILE_STRING,0&gt;(const S &amp;)' being compiled\r\n&gt; with\r\n&gt; [\r\n&gt; S=main::&lt;lambda_25da53a982e860e05e523c13e643a462&gt;::()::FMT_COMPILE_STRING\r\n&gt; ]\r\n\\main.cpp(119): message : see reference to function template instantiation 'fmt::v8::basic_format_string&lt;char,const char (&amp;)[9]&gt;::basic_format_string&lt;main::&lt;lambda_25da53a982e860e05e523c13e643a462&gt;::()::FMT_COMPILE_STRING,0&gt;(const S &amp;)' being compiled\r\n&gt; with\r\n&gt; [\r\n&gt; S=main::&lt;lambda_25da53a982e860e05e523c13e643a462&gt;::()::FMT_COMPILE_STRING\r\n&gt; ]<\/pre>\n<h2 class=\"md-end-block md-heading\"><span style=\"color: #0000ff;\"><strong><span class=\"md-plain\">Ta\u015f\u0131nabilirlik<\/span><\/strong><\/span><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">C++ 11&#8217;in temel bir tak\u0131m kabiliyetleri kullanmas\u0131 sebebi ile olduk\u00e7a ta\u015f\u0131nabilir (GCC 4.8, CLang 3.4 ve VS 2015 \u00fczeri derleyiciler ile kullan\u0131labilmektedir). Bunun ile birlikte C++ 98 ve daha eski derleyiciler i\u00e7in 4.x s\u00fcr\u00fcm\u00fc de halen desteklenmektedir.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Bunun yan\u0131nda normalde printf ile platform ba\u011f\u0131ml\u0131 \u00e7\u0131kt\u0131lar \u00fcretilen a\u015fa\u011f\u0131daki gibi kullan\u0131mlarda, bir \u00e7ok platform i\u00e7in ayn\u0131 \u00e7\u0131kt\u0131y\u0131 verir.<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n288\" mdtype=\"fences\">fmt::print(\"{}\", std::numeric_limits&lt;double&gt;::infinity());<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">ki bu &#8220;inf&#8221;&#8216;dir.<\/span><\/p>\n<h2 class=\"md-end-block md-heading\"><span style=\"color: #0000ff;\"><strong><span class=\"md-plain\">Performans<\/span><\/strong><\/span><\/h2>\n<figure class=\"md-table-fig\">\n<table class=\"md-table\">\n<thead>\n<tr class=\"md-end-block\">\n<th><span class=\"td-span\"><span class=\"md-plain\">K\u00fct\u00fcphane<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Metot<\/span><\/span><\/th>\n<th><span class=\"td-span\"><span class=\"md-plain\">Sn Cinsinden \u00c7al\u0131\u015fma Zaman\u0131<\/span><\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">libc<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">printf<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">1.04<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">libc++<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">std::ostream<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">3.05<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">{fmt} 6.1.1<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">fmt::print<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">0.75<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">Boost Format 1.67<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">boost::format<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">7.24<\/span><\/span><\/td>\n<\/tr>\n<tr class=\"md-end-block\">\n<td><span class=\"td-span\"><span class=\"md-plain\">Folly Format<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">folly::format<\/span><\/span><\/td>\n<td><span class=\"td-span\"><span class=\"md-plain\">2.23<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<div class=\"FFpbKc\"><\/div>\n<p id=\"c157\" class=\"oBOnKe\"><span class=\"JLqJ4b ChMk0b\" style=\"font-size: 16px;\" data-language-for-alternatives=\"tr\" data-language-to-translate-into=\"en\" data-phrase-index=\"0\" data-number-of-phrases=\"5\">{fmt}, yukar\u0131da kar\u015f\u0131la\u015ft\u0131r\u0131lan di\u011fer y\u00f6ntemlere g\u00f6re en h\u0131zl\u0131s\u0131d\u0131r, printf&#8217;den ~%35 daha h\u0131zl\u0131d\u0131r.<\/span><\/p>\n<p class=\"oBOnKe\"><span class=\"JLqJ4b ChMk0b\" style=\"font-size: 16px;\" data-language-for-alternatives=\"tr\" data-language-to-translate-into=\"en\" data-phrase-index=\"2\" data-number-of-phrases=\"5\">Yukar\u0131daki sonu\u00e7lar, clang++ -O3 -DNDEBUG -DSPEED_TEST -DHAVE_FORMAT ile macOS 10.14.6&#8217;da tinyformat_test.cpp olu\u015fturularak ve \u00fc\u00e7 \u00e7al\u0131\u015ft\u0131rmadan en iyisi al\u0131narak olu\u015fturulmu\u015ftur (yazar\u0131n yalanc\u0131s\u0131y\u0131m).<\/span> <span class=\"JLqJ4b ChMk0b\" style=\"font-size: 16px;\" data-language-for-alternatives=\"tr\" data-language-to-translate-into=\"en\" data-phrase-index=\"3\" data-number-of-phrases=\"5\">Testte, <span class=\"md-pair-s\" spellcheck=\"false\"><code>\"%0.10f:%04d:%+g:%s:%p:%c:%%\\n\"<\/code><\/span> bi\u00e7im dizesi veya e\u015fde\u011feri \/dev\/null&#8217;a g\u00f6nderilen \u00e7\u0131kt\u0131yla 2.000.000 kez doldurulur;<\/span> <span class=\"JLqJ4b ChMk0b\" style=\"font-size: 16px;\" data-language-for-alternatives=\"tr\" data-language-to-translate-into=\"en\" data-phrase-index=\"4\" data-number-of-phrases=\"5\">daha fazla ayr\u0131nt\u0131 i\u00e7in bkz. <span style=\"color: #008000;\"><strong><span class=\"md-meta-i-c md-link\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/fmtlib\/format-benchmark\/blob\/master\/src\/tinyformat-test.cc\"><span class=\"md-plain\">source<\/span><\/a><\/span><\/strong><\/span><span class=\"md-plain\">.<\/span><\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{fmt} is the fastest of the benchmarked methods, ~35% faster than <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>printf<\/code><\/span><span class=\"md-plain\">.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">The above results were generated by building <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>tinyformat_test.cpp<\/code><\/span><span class=\"md-plain\"> on macOS 10.14.6 with <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>clang++ -O3 -DNDEBUG -DSPEED_TEST -DHAVE_FORMAT<\/code><\/span><span class=\"md-plain\">, and taking the best of three runs. In the test, the format string <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>\"%0.10f:%04d:%+g:%s:%p:%c:%%\\n\"<\/code><\/span><span class=\"md-plain\"> or equivalent is filled 2,000,000 times with output sent to <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>\/dev\/null<\/code><\/span><span class=\"md-plain\">; for further details refer to the <\/span><span style=\"color: #008000;\"><strong><span class=\"md-meta-i-c md-link\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/fmtlib\/format-benchmark\/blob\/master\/src\/tinyformat-test.cc\"><span class=\"md-plain\">source<\/span><\/a><\/span><\/strong><\/span><span class=\"md-plain\">.<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">{fmt}, kayan nokta bi\u00e7imlendirmesinde std::ostringstream ve sprintf&#8217;den 20-30 kata kadar daha h\u0131zl\u0131d\u0131r <\/span><span class=\"md-plain\">(<\/span><span style=\"color: #008000;\"><strong><span class=\"md-meta-i-c md-link\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/fmtlib\/dtoa-benchmark\"><span class=\"md-plain\">dtoa-benchmark<\/span><\/a><\/span><\/strong><\/span><span class=\"md-plain\">), ve <\/span><span style=\"color: #008000;\"><strong><span class=\"md-meta-i-c md-link\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/google\/double-conversion\"><span class=\"md-plain\">double-conversion<\/span><\/a>, <\/span><\/strong><\/span><span class=\"md-meta-i-c md-link\"><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/ulfjack\/ryu\"><span class=\"md-plain\">ryu\u00a0<\/span><\/a><\/strong><\/span> den de.<\/span><\/p>\n<p id=\"rYkCCFy\"><img loading=\"lazy\" decoding=\"async\" width=\"822\" height=\"369\" class=\"alignnone size-full wp-image-2382 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92.png 822w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92-300x135.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92-768x345.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92-500x224.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92-150x67.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92-400x180.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92-800x359.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/11\/img_61a519415fd92-200x90.png 200w\" sizes=\"auto, (max-width: 822px) 100vw, 822px\" \/><\/p>\n<h2 class=\"md-end-block md-heading\"><span style=\"color: #0000ff;\"><strong><span class=\"md-plain\">Di\u011fer Dillerdeki Formatlama K\u00fct\u00fcphaneleri \u0130le Kar\u015f\u0131la\u015ft\u0131rma<\/span><\/strong><\/span><\/h2>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u00d6ncelikle temel kullan\u0131mlara bir g\u00f6z atal\u0131m:<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">C++:<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"C++\" cid=\"n394\" mdtype=\"fences\">auto text = fmt::format(\"[{}] {}, {}!\", 2021, \"Merhaba\", \"Dunya\");\r\nstd::cout &lt;&lt; text &lt;&lt; '\\n';<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">C#:<\/span><\/p>\n<pre class=\"md-fences mock-cm md-end-block\" spellcheck=\"false\" lang=\"c#\" cid=\"n396\" mdtype=\"fences\">var text = string.Format(\"[{0}] {2}, {1}!\", 2021, \"Merhaba\", \"Dunya\");\r\nConsole.WriteLine(text);<\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Python:<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"python\" cid=\"n398\" mdtype=\"fences\"><span role=\"presentation\"><span class=\"cm-variable\">auto<\/span> <span class=\"cm-variable\">text<\/span> = <span class=\"cm-variable\">fmt<\/span>::<span class=\"cm-builtin\">format<\/span>(<span class=\"cm-string\">\"[{}] {}, {}!\"<\/span>, <span class=\"cm-number\">2021<\/span>, <span class=\"cm-string\">\"Merhaba\"<\/span>, <span class=\"cm-string\">\"Dunya\"<\/span>);<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable\">std<\/span>::<span class=\"cm-variable\">cout<\/span> <span class=\"cm-operator\">&lt;&lt;<\/span> <span class=\"cm-variable\">text<\/span> <span class=\"cm-operator\">&lt;&lt;<\/span> <span class=\"cm-string\">'\\n'<\/span>;<\/span><\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u00c7\u0131kt\u0131:<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"shell\" cid=\"n400\" mdtype=\"fences\"><span role=\"presentation\">[2021] Merhaba, Dunya!<\/span><\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u015eimdi de isimlendirilmi\u015f arg\u00fcman kullan\u0131mlar\u0131na bir g\u00f6z atal\u0131m:<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">C++:<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"C++\" cid=\"n403\" mdtype=\"fences\"><span role=\"presentation\"><span class=\"cm-keyword\">auto<\/span> <span class=\"cm-variable\">text<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">fmt::format<\/span>(<span class=\"cm-string\">\"[{yil}] {ilkArg}, {ikinciArg}!\"<\/span>,<\/span>\r\n<span role=\"presentation\">                     \u00a0<span class=\"cm-variable\">fmt::arg<\/span>(<span class=\"cm-string\">\"yil\"<\/span>, <span class=\"cm-number\">2021<\/span>), <span class=\"cm-variable\">fmt::arg<\/span>(<span class=\"cm-string\">\"ilkArg\"<\/span>, <span class=\"cm-string\">\"Merhaba\"<\/span>),<\/span>\r\n<span role=\"presentation\">                     \u00a0<span class=\"cm-variable\">fmt::arg<\/span>(<span class=\"cm-string\">\"ikinciArg\"<\/span>, <span class=\"cm-string\">\"Dunya\"<\/span>));<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable\">std::cout<\/span> <span class=\"cm-operator\">&lt;&lt;<\/span> <span class=\"cm-variable\">text<\/span> <span class=\"cm-operator\">&lt;&lt;<\/span> <span class=\"cm-string\">'\\n'<\/span>;<\/span><\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">C#:<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"c#\" cid=\"n405\" mdtype=\"fences\"><span role=\"presentation\"><span class=\"cm-variable\">yil<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-number\">2021<\/span>;<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable-3\">string<\/span> <span class=\"cm-variable\">ilkArg<\/span><span class=\"cm-operator\">=<\/span><span class=\"cm-string\">\"Merhaba\"<\/span>, <span class=\"cm-variable\">ikinciArg<\/span><span class=\"cm-operator\">=<\/span><span class=\"cm-string\">\"Dunya\"<\/span>;<\/span>\r\n<span role=\"presentation\"><span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">text<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">$<\/span><span class=\"cm-string\">\"[{yil}] {ilkArg}, {ikinciArg}!\"<\/span>;<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable\">Console<\/span>.<span class=\"cm-variable\">WriteLine<\/span>(<span class=\"cm-variable\">text<\/span>);<\/span><\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">Python:<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"python\" cid=\"n407\" mdtype=\"fences\"><span role=\"presentation\"><span class=\"cm-variable\">text<\/span> = <span class=\"cm-string\">\"[{yil}] {ilkArg}, {ikinciArg}\"<\/span>.<span class=\"cm-property\">format<\/span>(<span class=\"cm-variable\">yil<\/span>=<span class=\"cm-number\">2021<\/span>, <span class=\"cm-variable\">ilkArg<\/span>=<span class=\"cm-string\">\"ilkArg\"<\/span>,<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable\">ikinciArg<\/span>=<span class=\"cm-string\">\"ikinciArg\"<\/span>)<\/span>\r\n<span role=\"presentation\"><span class=\"cm-builtin\">print<\/span>(<span class=\"cm-variable\">text<\/span>)<\/span><\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u00c7\u0131kt\u0131:<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"shell\" cid=\"n409\" mdtype=\"fences\"><span role=\"presentation\">[2021] Merhaba, D\u00fcnya!\r\n<\/span><\/pre>\n<h2><span style=\"color: #0000ff;\"><strong>Kaynaklar<\/strong><\/span><\/h2>\n<ul>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/fmtlib\/fmt\">https:\/\/github.com\/fmtlib\/fmt<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/fmt.dev\/latest\/syntax.html\">https:\/\/fmt.dev\/latest\/syntax.html<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/fmt.dev\/latest\/api.html\">https:\/\/fmt.dev\/latest\/api.html<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.youtube.com\/watch?v=ptba_AqFYCM\">https:\/\/www.youtube.com\/watch?v=ptba_AqFYCM<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.zverovich.net\/2020\/06\/13\/fast-int-to-string-revisited.html)\">https:\/\/www.zverovich.net\/2020\/06\/13\/fast-int-to-string-revisited.html)<\/a><\/strong><\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m, k\u0131sa bir aradan sonra, bir s\u00fcredir yaz\u0131l\u0131mlar\u0131mda kulland\u0131\u011f\u0131m ve sizlerin de kullanmas\u0131n\u0131 \u015fiddetle tavsiye etti\u011fim bir k\u00fct\u00fcphaneye derinlemesine g\u00f6z at\u0131yor olaca\u011f\u0131z: {fmt} k\u00fct\u00fcphanesi. Yaz\u0131 uzun, i\u015flecek kabiliyet \u00e7ok o zaman \u00e7ok oyalanmadan ba\u015flayal\u0131m. FMT {fmt} K\u00fct\u00fcphanesi FMT nedir? Geli\u015ftiricisinin a\u011fz\u0131yla bakacak olursak: {fmt} C stdio ve C++ iostream kabiliyetlerine, h\u0131zl\u0131 ve&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[33],"tags":[46,234,939,938,176,177,690,576,236],"class_list":["post-2377","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-haber","tag-c-11","tag-c-17","tag-cout","tag-fmt","tag-formatting","tag-library","tag-printf","tag-sprintf","tag-weekly-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m, k\u0131sa bir aradan sonra, bir s\u00fcredir yaz\u0131l\u0131mlar\u0131mda kulland\u0131\u011f\u0131m ve sizlerin de kullanmas\u0131n\u0131 \u015fiddetle tavsiye etti\u011fim bir k\u00fct\u00fcphaneye derinlemesine g\u00f6z at\u0131yor olaca\u011f\u0131z: {fmt} k\u00fct\u00fcphanesi. Yaz\u0131 uzun, i\u015flecek kabiliyet \u00e7ok o zaman \u00e7ok oyalanmadan ba\u015flayal\u0131m. FMT {fmt} K\u00fct\u00fcphanesi FMT nedir? Geli\u015ftiricisinin a\u011fz\u0131yla bakacak olursak: {fmt} C stdio ve C++ iostream kabiliyetlerine, h\u0131zl\u0131 ve... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-29T18:46:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png\" \/>\n\t<meta property=\"og:image:width\" content=\"32\" \/>\n\t<meta property=\"og:image:height\" content=\"32\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi\",\"datePublished\":\"2021-11-29T18:46:20+00:00\",\"dateModified\":\"2021-11-29T18:46:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\"},\"wordCount\":2664,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"C++ 11\",\"c++ 17\",\"cout\",\"fmt\",\"Formatting\",\"library\",\"printf\",\"sprintf\",\"weekly c++\"],\"articleSection\":[\"Haber\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\",\"name\":\"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2021-11-29T18:46:20+00:00\",\"dateModified\":\"2021-11-29T18:46:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m, k\u0131sa bir aradan sonra, bir s\u00fcredir yaz\u0131l\u0131mlar\u0131mda kulland\u0131\u011f\u0131m ve sizlerin de kullanmas\u0131n\u0131 \u015fiddetle tavsiye etti\u011fim bir k\u00fct\u00fcphaneye derinlemesine g\u00f6z at\u0131yor olaca\u011f\u0131z: {fmt} k\u00fct\u00fcphanesi. Yaz\u0131 uzun, i\u015flecek kabiliyet \u00e7ok o zaman \u00e7ok oyalanmadan ba\u015flayal\u0131m. FMT {fmt} K\u00fct\u00fcphanesi FMT nedir? Geli\u015ftiricisinin a\u011fz\u0131yla bakacak olursak: {fmt} C stdio ve C++ iostream kabiliyetlerine, h\u0131zl\u0131 ve... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2021-11-29T18:46:20+00:00","og_image":[{"width":32,"height":32,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi","datePublished":"2021-11-29T18:46:20+00:00","dateModified":"2021-11-29T18:46:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/"},"wordCount":2664,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["C++ 11","c++ 17","cout","fmt","Formatting","library","printf","sprintf","weekly c++"],"articleSection":["Haber"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/","name":"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2021-11-29T18:46:20+00:00","dateModified":"2021-11-29T18:46:20+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/29\/haftalik-c-43-fmt-kutuphanesi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 43 \u2013 {fmt} K\u00fct\u00fcphanesi"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2377"}],"version-history":[{"count":9,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2377\/revisions"}],"predecessor-version":[{"id":2389,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2377\/revisions\/2389"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}