<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Frage zur Optimierfähigkeit meines Compilers]]></title><description><![CDATA[<p>Hallo, folgenden Code habe ich im Release Modus compiliert:</p>
<pre><code class="language-cpp">template&lt;unsigned int N&gt; class Klasse
{
    void foo(unsigned int a) const
    {
        if(N&lt;32)
        {
            if(a &gt;= (1&lt;&lt;N) )
                cout&lt;&lt;&quot;error&quot;;
        }
    }
};

//...

Klasse&lt;34&gt; test;
</code></pre>
<p>Dann bekomme ich als Warnung:</p>
<pre><code>[Zeile 7] left shift count &gt;= width of type [with N=34]
</code></pre>
<p>Aber diese If Abfrage kann der Compiler doch nie Erreichen, da N&lt;32 immer false ist.<br />
Er scheint allerdings den Shift an sich zu optimieren, indem er den Ausdruck mit einer Null ersetzt</p>
<pre><code>[Zeile 7] comparison of unsigned expression &gt;= 0 is always true
</code></pre>
<p>Warum optimiert mein Compiler (Code Blocks) nicht die ganze If Abfrage raus? Oder hat die Warnung des Compilers nichts mit dem eigentlichen Binary nachher zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256798/frage-zur-optimierfähigkeit-meines-compilers</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 04:39:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256798.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Dec 2009 01:20:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Optimierfähigkeit meines Compilers on Fri, 18 Dec 2009 01:20:34 GMT]]></title><description><![CDATA[<p>Hallo, folgenden Code habe ich im Release Modus compiliert:</p>
<pre><code class="language-cpp">template&lt;unsigned int N&gt; class Klasse
{
    void foo(unsigned int a) const
    {
        if(N&lt;32)
        {
            if(a &gt;= (1&lt;&lt;N) )
                cout&lt;&lt;&quot;error&quot;;
        }
    }
};

//...

Klasse&lt;34&gt; test;
</code></pre>
<p>Dann bekomme ich als Warnung:</p>
<pre><code>[Zeile 7] left shift count &gt;= width of type [with N=34]
</code></pre>
<p>Aber diese If Abfrage kann der Compiler doch nie Erreichen, da N&lt;32 immer false ist.<br />
Er scheint allerdings den Shift an sich zu optimieren, indem er den Ausdruck mit einer Null ersetzt</p>
<pre><code>[Zeile 7] comparison of unsigned expression &gt;= 0 is always true
</code></pre>
<p>Warum optimiert mein Compiler (Code Blocks) nicht die ganze If Abfrage raus? Oder hat die Warnung des Compilers nichts mit dem eigentlichen Binary nachher zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824291</guid><dc:creator><![CDATA[malcolm85]]></dc:creator><pubDate>Fri, 18 Dec 2009 01:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Optimierfähigkeit meines Compilers on Fri, 18 Dec 2009 02:05:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Oder hat die Warnung des Compilers nichts mit dem eigentlichen Binary nachher zu tun?</p>
</blockquote>
<p>genau</p>
<p>kannst ja mal die disassembly angucken ob er dafür wirklich code generiert hat<br />
sollte er nicht<br />
wenn schon is GCC schlechter als ich dachte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824297</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 18 Dec 2009 02:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Optimierfähigkeit meines Compilers on Fri, 18 Dec 2009 11:52:58 GMT]]></title><description><![CDATA[<p>Die Optimierung findet normalerweise nach dem Compilieren statt, daher wird der Code vorher schon durchgecheckt. Was ja auch sehr sinnvoll ist, denn in 99% der Fälle ist sowas wie dein Beispiel ja ein Programmierfehler und sollte mit einer entsprechenden Warnung bedacht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824403</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 18 Dec 2009 11:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Optimierfähigkeit meines Compilers on Fri, 18 Dec 2009 11:57:03 GMT]]></title><description><![CDATA[<p>Dass die Warnung überhaupt ausgegeben wird, sollte ein Zeichen dafür sein, dass der Compiler gemerkt hat, welche Umstände vorliegen und demnach den Ausdruck optimieren wird.<br />
Wenn du den Assembly-Output überprüfst, dann siehst du, dass z.B. für</p>
<pre><code class="language-cpp">Klasse&lt;34&gt; test;
test.foo(100);
</code></pre>
<p>keinerlei Code erzeugt wird.</p>
<p>Übrigens: den Compiler, den du verwendest, ist gcc bzw. g++. Code::Blocks ist &quot;nur&quot; eine IDE.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824405</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Fri, 18 Dec 2009 11:57:03 GMT</pubDate></item></channel></rss>