<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Komentarze do: Nadużywanie preprocesora w C++</title>
	<atom:link href="http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/</link>
	<description>Just another programmer</description>
	<lastBuildDate>Thu, 03 Feb 2011 12:16:39 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
	<item>
		<title>Autor: Gynvael Coldwind</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19323</link>
		<dc:creator>Gynvael Coldwind</dc:creator>
		<pubDate>Wed, 10 Mar 2010 14:28:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19323</guid>
		<description>@Xion
Mamy różnicę założeń. Ja założyłem, że programista jest kompetentny i wie jak działają makra, natomiast Ty założyłeś, że programista jest niekompetentny ;)</description>
		<content:encoded><![CDATA[<p>@Xion<br />
Mamy różnicę założeń. Ja założyłem, że programista jest kompetentny i wie jak działają makra, natomiast Ty założyłeś, że programista jest niekompetentny ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Xion</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19322</link>
		<dc:creator>Xion</dc:creator>
		<pubDate>Wed, 10 Mar 2010 00:24:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19322</guid>
		<description>@GC: Wszystko ładnie i pięknie (i przejrzyście), ale co powiesz na to:
&lt;pre lang=&quot;cpp&quot;&gt;
int i = 5;
cout &lt;&lt; max(5, i++)
&lt;/pre&gt;
gdzie max jest oczywiście twoim makrem? :)</description>
		<content:encoded><![CDATA[<p>@GC: Wszystko ładnie i pięknie (i przejrzyście), ale co powiesz na to:</p>

<div class="wp_codebox"><table><tr id="p4651"><td class="code" id="p465code1"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">5</span><span style="color: #008080;">;</span>
<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> max<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">5</span>, i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span></pre></td></tr></table></div>

<p>gdzie max jest oczywiście twoim makrem? :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Malcom</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19315</link>
		<dc:creator>Malcom</dc:creator>
		<pubDate>Thu, 28 Jan 2010 21:45:35 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19315</guid>
		<description>W wiekszosci wypadkow wystarcza wskaznik na staly obiekt, sam czesto stosuje dla stalych ;)

Aczkolwiek, jak sam pokazales, staly wskaznik na staly obiekt uchroni przed niektorymi dziwnymi &quot;zabiegami&quot; programistow korzystajacych z naszego kodu, ktore w wielu przypadkach sa poprostu &quot;wypadkami&quot; przy pracy.</description>
		<content:encoded><![CDATA[<p>W wiekszosci wypadkow wystarcza wskaznik na staly obiekt, sam czesto stosuje dla stalych ;)</p>
<p>Aczkolwiek, jak sam pokazales, staly wskaznik na staly obiekt uchroni przed niektorymi dziwnymi &#8222;zabiegami&#8221; programistow korzystajacych z naszego kodu, ktore w wielu przypadkach sa poprostu &#8222;wypadkami&#8221; przy pracy.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: matekm</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19314</link>
		<dc:creator>matekm</dc:creator>
		<pubDate>Thu, 28 Jan 2010 06:36:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19314</guid>
		<description>&lt;pre lang=&quot;cpp&quot;&gt;
const char* name = &quot;dupa&quot;;
&lt;/pre&gt;

No i to jest ten częsty błąd, który często popełniają ludzie preferujący const nad #define. Powyższa deklaracja zapobiega tylko przed zmianą testu na który wskazuje wskaźnik - nie zapobiega natomiast nad zmianą wskaźnika. I tak - poniższy kod jest oczywiście nielegalny:

&lt;pre lang=&quot;cpp&quot;&gt;
#include &lt;iostream&gt;

const char* NAME = &quot;dupa&quot;;

int main () {
    NAME[2] = &#039;t&#039;;
    std::cout &lt;&lt; NAME &lt;&lt; std::endl;
    return 0;
}
&lt;/pre&gt;

Ale co z tego, skoro programista może zrobić po prostu tak:

&lt;pre lang=&quot;cpp&quot;&gt;
#include &lt;iostream&gt;

const char* NAME = &quot;dupa&quot;;

int main () {
    const char* NAME2 = &quot;duta&quot;;
    NAME = NAME2;
    std::cout &lt;&lt; NAME &lt;&lt; std::endl;
    return 0;
}
&lt;/pre&gt;

i już nasza &quot;stała&quot; jest czymś innym.

Jeżeli chcesz więc zadeklarować zmienną zawierającą łańcuch stałych, poprawna deklaracja wygląda tak:

&lt;pre lang=&quot;cpp&quot;&gt;
const char* const name = &quot;dupa&quot;;
&lt;/pre&gt;

Wtedy oba kody są nielegalne.

Pozdrawiam;)</description>
		<content:encoded><![CDATA[
<div class="wp_codebox"><table><tr id="p4652"><td class="code" id="p465code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> name <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;dupa&quot;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>No i to jest ten częsty błąd, który często popełniają ludzie preferujący const nad #define. Powyższa deklaracja zapobiega tylko przed zmianą testu na który wskazuje wskaźnik &#8211; nie zapobiega natomiast nad zmianą wskaźnika. I tak &#8211; poniższy kod jest oczywiście nielegalny:</p>

<div class="wp_codebox"><table><tr id="p4653"><td class="code" id="p465code3"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> NAME <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;dupa&quot;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    NAME<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'t'</span><span style="color: #008080;">;</span>
    std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> NAME <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Ale co z tego, skoro programista może zrobić po prostu tak:</p>

<div class="wp_codebox"><table><tr id="p4654"><td class="code" id="p465code4"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> NAME <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;dupa&quot;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> NAME2 <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;duta&quot;</span><span style="color: #008080;">;</span>
    NAME <span style="color: #000080;">=</span> NAME2<span style="color: #008080;">;</span>
    std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> NAME <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>i już nasza &#8222;stała&#8221; jest czymś innym.</p>
<p>Jeżeli chcesz więc zadeklarować zmienną zawierającą łańcuch stałych, poprawna deklaracja wygląda tak:</p>

<div class="wp_codebox"><table><tr id="p4655"><td class="code" id="p465code5"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> <span style="color: #0000ff;">const</span> name <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;dupa&quot;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Wtedy oba kody są nielegalne.</p>
<p>Pozdrawiam;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Gynvael Coldwind</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19300</link>
		<dc:creator>Gynvael Coldwind</dc:creator>
		<pubDate>Sun, 06 Dec 2009 21:47:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19300</guid>
		<description>@malcom
Sure, możesz użyć mojego kodu ;&gt; Jeśli coś można w nim lepiej zrobić, to bardzo chętnie się tego nauczę ;&gt;</description>
		<content:encoded><![CDATA[<p>@malcom<br />
Sure, możesz użyć mojego kodu ;&gt; Jeśli coś można w nim lepiej zrobić, to bardzo chętnie się tego nauczę ;&gt;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: malcom</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19299</link>
		<dc:creator>malcom</dc:creator>
		<pubDate>Sun, 06 Dec 2009 19:18:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19299</guid>
		<description>Czytelnosc, w sumie to zalezy dla kogo ;)

Debugowanie nie rozni sie niczym od debugowania zwyklego kodu, ale wszelkie komunikaty bledow moga byc bardzo odstraszajace, choc coraz lepiej prezentuja je &quot;nowe&quot; kompilatory ;p

No i jak pisalem, wzorce podlegaja regulom jezyka co ma zasadnicza zalete nad makrami, w wiekszosci przypadkow pozwala szybciej wychwycic bledy, co w przypadku makr mogloby dac o sobie znac dopiero w run-time. Aczkolwiek zalezy to od kodu.

Co racja to racja, przyklad typowo pmodelowo-przykladowy, ludzie robia rozne dziwne rzeczy na makrach, zamiast uproscic sobie zycie i wykorzystac dedykowane do tego celu narzedzia jezyka.

Odnosnie Twojego kodu, to o ile to mozliwe i nie bedzie problemem, to chcialbym wykorzytac niektore fragmenty do notek z &quot;tej&quot; serii. Trafilem na kilka fragmentów, ktore sa idealnym przykladem pisania w C++ stylem C, i sie idealnie nadaja do pokazania, jak minimalne wykorzystanie kilku podstawowych nozliwosci jezyka C++ wplyneloby pozytywnie nie tylko na sama prezentacje kodu i wyrazenia idei, czy zamaiarow autora, ale przede wszystkim uproscilo kod, polepszylo dzialanie, i pozwolilo uchronic sie przed niektorymi potencjalnymi bledami.</description>
		<content:encoded><![CDATA[<p>Czytelnosc, w sumie to zalezy dla kogo ;)</p>
<p>Debugowanie nie rozni sie niczym od debugowania zwyklego kodu, ale wszelkie komunikaty bledow moga byc bardzo odstraszajace, choc coraz lepiej prezentuja je &#8222;nowe&#8221; kompilatory ;p</p>
<p>No i jak pisalem, wzorce podlegaja regulom jezyka co ma zasadnicza zalete nad makrami, w wiekszosci przypadkow pozwala szybciej wychwycic bledy, co w przypadku makr mogloby dac o sobie znac dopiero w run-time. Aczkolwiek zalezy to od kodu.</p>
<p>Co racja to racja, przyklad typowo pmodelowo-przykladowy, ludzie robia rozne dziwne rzeczy na makrach, zamiast uproscic sobie zycie i wykorzystac dedykowane do tego celu narzedzia jezyka.</p>
<p>Odnosnie Twojego kodu, to o ile to mozliwe i nie bedzie problemem, to chcialbym wykorzytac niektore fragmenty do notek z &#8222;tej&#8221; serii. Trafilem na kilka fragmentów, ktore sa idealnym przykladem pisania w C++ stylem C, i sie idealnie nadaja do pokazania, jak minimalne wykorzystanie kilku podstawowych nozliwosci jezyka C++ wplyneloby pozytywnie nie tylko na sama prezentacje kodu i wyrazenia idei, czy zamaiarow autora, ale przede wszystkim uproscilo kod, polepszylo dzialanie, i pozwolilo uchronic sie przed niektorymi potencjalnymi bledami.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Gynvael Coldwind</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19298</link>
		<dc:creator>Gynvael Coldwind</dc:creator>
		<pubDate>Sat, 05 Dec 2009 20:46:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19298</guid>
		<description>Cześć :)

Na początku zaznaczę, że rozumiem Twoje &#039;ale&#039; do preprocesora, i faktycznie w większości przypadków się z tobą zgodzę.

Po za jednym ;&gt;

Mianowicie zacytowane przez ciebie makro &#039;max&#039;. Osobiście wychodzę z założenia, że wszystkich chwyty dozwolone, które zwiększają czytelność, upraszczają kod, i upraszczają pisanie (przy utopijnym założeniu, że programiści czytający kod są na dobrym poziomie). Biorąc pod uwagę te 3 punkty, dokonam porównania dwóch stylów &#039;max&#039;:

&lt;pre lang=&quot;cpp&quot;&gt;
#define max(x,y) (x &lt; y ? x : y)

template&lt;typename T&gt;
inline T max(const T&amp; x, const T&amp; y) {
	return x &gt; y ? x : y;
}
&lt;/pre&gt;

Czytelność: szczerze to jakoś 33 znakowe makro mnie bardziej przekonuje niż 3-liniowy template
Uproszczenie kodu: (chodzi o zastosowanie) w obu przypadkach wychodzi na to samo
Uproszczenie pisania: (chodzi o tworzenie kodu) dla wprawnego programisty to bez różnicy, niemniej jednak 33 znaki wklepie się szybciej niż 3 linie

Po za tym przy debugowaniu tego mogę sobie spokojnie preprocesor rozwinąć (gcc -E) i zobaczyć wtf. Template&#039;y mi tego nie oferują (z tego co mi wiadomo).

Niemniej jednak oczywiście zdaje sobie sprawę że przykład z funkcją max może być akurat na granicy tego co wygląda OK w makrach i tego co lepiej zrobić na template&#039;ach.

Z drugiej jednak strony, mój kod raczej nigdy nie służył do czytania ;DDD</description>
		<content:encoded><![CDATA[<p>Cześć :)</p>
<p>Na początku zaznaczę, że rozumiem Twoje &#8216;ale&#8217; do preprocesora, i faktycznie w większości przypadków się z tobą zgodzę.</p>
<p>Po za jednym ;&gt;</p>
<p>Mianowicie zacytowane przez ciebie makro &#8216;max&#8217;. Osobiście wychodzę z założenia, że wszystkich chwyty dozwolone, które zwiększają czytelność, upraszczają kod, i upraszczają pisanie (przy utopijnym założeniu, że programiści czytający kod są na dobrym poziomie). Biorąc pod uwagę te 3 punkty, dokonam porównania dwóch stylów &#8216;max&#8217;:</p>

<div class="wp_codebox"><table><tr id="p4656"><td class="code" id="p465code6"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#define max(x,y) (x &lt; y ? x : y)</span>
&nbsp;
<span style="color: #0000ff;">template</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">inline</span> T max<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T<span style="color: #000040;">&amp;</span> x, <span style="color: #0000ff;">const</span> T<span style="color: #000040;">&amp;</span> y<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> x <span style="color: #000080;">&gt;</span> y <span style="color: #008080;">?</span> x <span style="color: #008080;">:</span> y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Czytelność: szczerze to jakoś 33 znakowe makro mnie bardziej przekonuje niż 3-liniowy template<br />
Uproszczenie kodu: (chodzi o zastosowanie) w obu przypadkach wychodzi na to samo<br />
Uproszczenie pisania: (chodzi o tworzenie kodu) dla wprawnego programisty to bez różnicy, niemniej jednak 33 znaki wklepie się szybciej niż 3 linie</p>
<p>Po za tym przy debugowaniu tego mogę sobie spokojnie preprocesor rozwinąć (gcc -E) i zobaczyć wtf. Template&#8217;y mi tego nie oferują (z tego co mi wiadomo).</p>
<p>Niemniej jednak oczywiście zdaje sobie sprawę że przykład z funkcją max może być akurat na granicy tego co wygląda OK w makrach i tego co lepiej zrobić na template&#8217;ach.</p>
<p>Z drugiej jednak strony, mój kod raczej nigdy nie służył do czytania ;DDD</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: malcom</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19297</link>
		<dc:creator>malcom</dc:creator>
		<pubDate>Fri, 04 Dec 2009 17:36:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19297</guid>
		<description>Tak, znam wxWidgets od srodka dosyc dobrze i to prawda, ze nie grzesza z preprocesorem ;)

Aczkolwiek biblioteka ta powstawala w dawnych czasach, przed standardem i duzo pzozostalosci nadal trzymanych jest w kodzie. Na szczescie od jakiegos czasu jestesmy na dobrej drodze zmian.
Makra mozemy tam podzielic na trzy grupy, rzeczy ktore nie da sie inaczej zrobic niz za pomoca makr, aby zachowac dotychczasowy wyglad (statyczne tablice eventow), makra bedace wrapperami na nowe rozwiazania (glownie na templatesy rozne),aby zachowac kompatybilnosc ze starzym kodem i rozne stare nalecialosci, ktorych nikt nie dotyka.

Ja mam nadzieje, ze z czasem, wiecej &quot;nowoczesnych&quot; (obecnie to juz standardowych) mechanizmow jezyka bedzie wykorzystane, jak namespace, template, exceptions...

Ostatanio dodano wsparcie dla &quot;natywnego&quot; RTTI, jakis czas temu caly system eventow oparto na wzorcach i dodano mozliwosc wspolpracy z boost.signals. Oby tak dalej ;)</description>
		<content:encoded><![CDATA[<p>Tak, znam wxWidgets od srodka dosyc dobrze i to prawda, ze nie grzesza z preprocesorem ;)</p>
<p>Aczkolwiek biblioteka ta powstawala w dawnych czasach, przed standardem i duzo pzozostalosci nadal trzymanych jest w kodzie. Na szczescie od jakiegos czasu jestesmy na dobrej drodze zmian.<br />
Makra mozemy tam podzielic na trzy grupy, rzeczy ktore nie da sie inaczej zrobic niz za pomoca makr, aby zachowac dotychczasowy wyglad (statyczne tablice eventow), makra bedace wrapperami na nowe rozwiazania (glownie na templatesy rozne),aby zachowac kompatybilnosc ze starzym kodem i rozne stare nalecialosci, ktorych nikt nie dotyka.</p>
<p>Ja mam nadzieje, ze z czasem, wiecej &#8222;nowoczesnych&#8221; (obecnie to juz standardowych) mechanizmow jezyka bedzie wykorzystane, jak namespace, template, exceptions&#8230;</p>
<p>Ostatanio dodano wsparcie dla &#8222;natywnego&#8221; RTTI, jakis czas temu caly system eventow oparto na wzorcach i dodano mozliwosc wspolpracy z boost.signals. Oby tak dalej ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: lopik</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19296</link>
		<dc:creator>lopik</dc:creator>
		<pubDate>Fri, 04 Dec 2009 16:18:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19296</guid>
		<description>&lt;blockquote&gt;Szlag mnie trafia, gdy widzę w kolejnym programie, czy projekcie używanie dyrektywy define preprocesora do definiowania stałych, rozwijanych funkcji [...] preprocesora&lt;/blockquote&gt;

Hmm to co powiesz o wxWidgets? ;) programiści tej biblioteki raczej nie unikają stosowania #define w kodzie. ;)</description>
		<content:encoded><![CDATA[<blockquote><p>Szlag mnie trafia, gdy widzę w kolejnym programie, czy projekcie używanie dyrektywy define preprocesora do definiowania stałych, rozwijanych funkcji [...] preprocesora</p></blockquote>
<p>Hmm to co powiesz o wxWidgets? ;) programiści tej biblioteki raczej nie unikają stosowania #define w kodzie. ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: malcom</title>
		<link>http://blog.malcom.pl/2009/11/30/naduzywanie-preprocesora-w-cpp/#comment-19295</link>
		<dc:creator>malcom</dc:creator>
		<pubDate>Tue, 01 Dec 2009 20:16:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=465#comment-19295</guid>
		<description>Takie wlasnie udziwnienia i &quot;ulatwienia&quot; sa najgorsze, szczegolnie jak sa nakladka na slowa zastrzezone, bo moga wprowadzac zamieszanie dla kogos kto bedzie staral sie zrozumiec kod ;)
Nie wspominajac o tym, ze wszystkie &lt;em&gt;Coding Style Guide&lt;/em&gt; zabraniaja uzywania preprocesora.

Dla mnie lepszym pomyslem jest pozostawienie zwyklego &lt;code&gt;for&lt;/code&gt;, a jak bardzo chcemy operowac na zakresie to &lt;code&gt;std::for_each()&lt;/code&gt; lub poczekac na C++0x&#039;owe &lt;code&gt;for&lt;/code&gt; dla zakresow ;p</description>
		<content:encoded><![CDATA[<p>Takie wlasnie udziwnienia i &#8222;ulatwienia&#8221; sa najgorsze, szczegolnie jak sa nakladka na slowa zastrzezone, bo moga wprowadzac zamieszanie dla kogos kto bedzie staral sie zrozumiec kod ;)<br />
Nie wspominajac o tym, ze wszystkie <em>Coding Style Guide</em> zabraniaja uzywania preprocesora.</p>
<p>Dla mnie lepszym pomyslem jest pozostawienie zwyklego <code>for</code>, a jak bardzo chcemy operowac na zakresie to <code>std::for_each()</code> lub poczekac na C++0x&#8217;owe <code>for</code> dla zakresow ;p</p>
]]></content:encoded>
	</item>
</channel>
</rss>

