<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">
<channel>
	<title>Komentarze do MalDevBlog</title>
	
	<link>http://blog.malcom.pl</link>
	<description>Just another programmer</description>
	<lastBuildDate>Thu, 08 Jul 2010 20:59:42 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/malcom/maldevblog/comments" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="malcom/maldevblog/comments" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Skomentuj Programowanie wymaga myślenia!, którego autorem jest Malcom</title>
		<link>http://blog.malcom.pl/2009/09/09/programowanie-wymaga-myslenia/#comment-19358</link>
		<dc:creator>Malcom</dc:creator>
		<pubDate>Thu, 08 Jul 2010 20:59:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=449#comment-19358</guid>
		<description>Musialo gdzies wciaknac inkrementacje, dzieki za uwage ;)</description>
		<content:encoded><![CDATA[<p>Musialo gdzies wciaknac inkrementacje, dzieki za uwage ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Skomentuj Programowanie wymaga myślenia!, którego autorem jest Gadzio</title>
		<link>http://blog.malcom.pl/2009/09/09/programowanie-wymaga-myslenia/#comment-19357</link>
		<dc:creator>Gadzio</dc:creator>
		<pubDate>Thu, 08 Jul 2010 20:30:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=449#comment-19357</guid>
		<description>&lt;pre lang="cpp"&gt;
int strlen(const char* str)
{
	int len = 0;
	while (*str) len++;
	return len;
}
&lt;/pre&gt;

Kolego, masz tutaj błąd - to nie ma prawa zadziałać, bo należy jeszcze dodać 1 do wskaźnika, sam operator wyłuskania nie zrobi tego

Poprawny kod:

&lt;pre lang="cpp"&gt;
int strlen(const char* str)
{
	int len = 0;
	while (*str++) len++;
	return len;
}
&lt;/pre&gt;

Pozdrawiam.</description>
		<content:encoded><![CDATA[
<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> <span style="color: #0000dd;">strlen</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> len <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span> len<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> len<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Kolego, masz tutaj błąd &#8211; to nie ma prawa zadziałać, bo należy jeszcze dodać 1 do wskaźnika, sam operator wyłuskania nie zrobi tego</p>
<p>Poprawny kod:</p>

<div class="wp_codebox"><table><tr id="p4652"><td class="code" id="p465code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> <span style="color: #0000dd;">strlen</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> len <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> len<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> len<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Pozdrawiam.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Skomentuj Nadużywanie preprocesora w C++, którego autorem jest 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>Skomentuj Nadużywanie preprocesora w C++, którego autorem jest 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="cpp"&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="p4653"><td class="code" id="p465code3"><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>Skomentuj Modern C++, którego autorem jest Malcom</title>
		<link>http://blog.malcom.pl/2009/11/23/modern-cpp/#comment-19320</link>
		<dc:creator>Malcom</dc:creator>
		<pubDate>Mon, 15 Feb 2010 16:20:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=462#comment-19320</guid>
		<description>To prawda, ale obecnie kompilatory juz nieco lepiej prezentuja bledy z szablonami, gorzej jak gdzies dostaniemy taki surowy, niesformatowany, np. w call stacku to wtedy "droga przez meke" co szczegolnie daje o sobie znac w wielu zagniezdzeniach szablonow, czyli dzien powszedni w przypadku boosta.

Milo mi slyszec, ze komus sie podoba ;)</description>
		<content:encoded><![CDATA[<p>To prawda, ale obecnie kompilatory juz nieco lepiej prezentuja bledy z szablonami, gorzej jak gdzies dostaniemy taki surowy, niesformatowany, np. w call stacku to wtedy &#8222;droga przez meke&#8221; co szczegolnie daje o sobie znac w wielu zagniezdzeniach szablonow, czyli dzien powszedni w przypadku boosta.</p>
<p>Milo mi slyszec, ze komus sie podoba ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Skomentuj Trudne przypadki: buffer overflow, którego autorem jest Malcom</title>
		<link>http://blog.malcom.pl/2009/11/06/trudne-przypadki-buffer-overflow/#comment-19319</link>
		<dc:creator>Malcom</dc:creator>
		<pubDate>Mon, 15 Feb 2010 16:15:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=458#comment-19319</guid>
		<description>Poziom warningow byl chyba zbyt niski w projekcie ;) No i kod byl uzywany do tej pory, wiec zaufalem i zbytnio nie zwrocilem uwagi na jego bebechy przy przenoszeniu.</description>
		<content:encoded><![CDATA[<p>Poziom warningow byl chyba zbyt niski w projekcie ;) No i kod byl uzywany do tej pory, wiec zaufalem i zbytnio nie zwrocilem uwagi na jego bebechy przy przenoszeniu.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Skomentuj Trudne przypadki: buffer overflow, którego autorem jest Mariusz Wojtysiak</title>
		<link>http://blog.malcom.pl/2009/11/06/trudne-przypadki-buffer-overflow/#comment-19318</link>
		<dc:creator>Mariusz Wojtysiak</dc:creator>
		<pubDate>Mon, 15 Feb 2010 14:10:06 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=458#comment-19318</guid>
		<description>Błąd ciekawy z gatunku wrednych.

A czy kompilator nie rzucił warniga przy rzutowaniu bool* na BOOL* ?</description>
		<content:encoded><![CDATA[<p>Błąd ciekawy z gatunku wrednych.</p>
<p>A czy kompilator nie rzucił warniga przy rzutowaniu bool* na BOOL* ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Skomentuj Modern C++, którego autorem jest Mariusz Wojtysiak</title>
		<link>http://blog.malcom.pl/2009/11/23/modern-cpp/#comment-19317</link>
		<dc:creator>Mariusz Wojtysiak</dc:creator>
		<pubDate>Mon, 15 Feb 2010 13:49:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcom.pl/?p=462#comment-19317</guid>
		<description>Tak - nowoczesne metaprogramowanie jest fajne, ale:

1. Czas kompilacji programów wykorzystujących templejty znacznie się wydłuża. Odczułem to boleśnie gdy przeszedłem na boosta.

2. Komunikaty o błędach są kosmicznie długie: jeden komunikat wygenerowany przez g++ może miec ponad ekran i zawiera cały "stos" wywołań templejta. Odnalezienie się w tym gąszczu wymaga nieco ćwiczeń.

A tak w ogóle to fajny ten blog :-)</description>
		<content:encoded><![CDATA[<p>Tak &#8211; nowoczesne metaprogramowanie jest fajne, ale:</p>
<p>1. Czas kompilacji programów wykorzystujących templejty znacznie się wydłuża. Odczułem to boleśnie gdy przeszedłem na boosta.</p>
<p>2. Komunikaty o błędach są kosmicznie długie: jeden komunikat wygenerowany przez g++ może miec ponad ekran i zawiera cały &#8222;stos&#8221; wywołań templejta. Odnalezienie się w tym gąszczu wymaga nieco ćwiczeń.</p>
<p>A tak w ogóle to fajny ten blog :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Skomentuj Nadużywanie preprocesora w C++, którego autorem jest 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 "zabiegami" programistow korzystajacych z naszego kodu, ktore w wielu przypadkach sa poprostu "wypadkami" 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>Skomentuj Nadużywanie preprocesora w C++, którego autorem jest 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="cpp"&gt;
const char* name = "dupa";
&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="cpp"&gt;
#include &lt;iostream&gt;

const char* NAME = "dupa";

int main () {
    NAME[2] = 't';
    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="cpp"&gt;
#include &lt;iostream&gt;

const char* NAME = "dupa";

int main () {
    const char* NAME2 = "duta";
    NAME = NAME2;
    std::cout &lt;&lt; NAME &lt;&lt; std::endl;
    return 0;
}
&lt;/pre&gt;

i już nasza "stała" jest czymś innym.

Jeżeli chcesz więc zadeklarować zmienną zawierającą łańcuch stałych, poprawna deklaracja wygląda tak:

&lt;pre lang="cpp"&gt;
const char* const name = "dupa";
&lt;/pre&gt;

Wtedy oba kody są nielegalne.

Pozdrawiam;)</description>
		<content:encoded><![CDATA[
<div class="wp_codebox"><table><tr id="p4654"><td class="code" id="p465code4"><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="p4655"><td class="code" id="p465code5"><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="p4656"><td class="code" id="p465code6"><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="p4657"><td class="code" id="p465code7"><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>
</channel>
</rss>
