<?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[Übersetzungsunterschied]]></title><description><![CDATA[<p>Macht der Compiler einen Unterschied zwischen</p>
<pre><code class="language-cpp">int a = 0;
while(a++ &lt; 10);
</code></pre>
<p>und</p>
<pre><code class="language-cpp">int a = 0;
while(a++ != 10);
</code></pre>
<p>beim Übersetzen in Assembler-Code?<br />
(Ersteres trägt zur Verständlichkeit bei...)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281788/übersetzungsunterschied</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 12:19:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281788.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Feb 2011 21:07:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Übersetzungsunterschied on Mon, 07 Feb 2011 21:07:20 GMT]]></title><description><![CDATA[<p>Macht der Compiler einen Unterschied zwischen</p>
<pre><code class="language-cpp">int a = 0;
while(a++ &lt; 10);
</code></pre>
<p>und</p>
<pre><code class="language-cpp">int a = 0;
while(a++ != 10);
</code></pre>
<p>beim Übersetzen in Assembler-Code?<br />
(Ersteres trägt zur Verständlichkeit bei...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017993</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 07 Feb 2011 21:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Übersetzungsunterschied on Mon, 07 Feb 2011 21:13:31 GMT]]></title><description><![CDATA[<p>Im allgemeinen ja. Ein Test auf Ungleichheit oder Kleiner ist recht unterschiedlich.</p>
<p>Kann aber sein, dass im richtigen Kontext beides zum gleichen wird, aber das müsstest du halt mal schauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017996</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 07 Feb 2011 21:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Übersetzungsunterschied on Mon, 07 Feb 2011 21:22:33 GMT]]></title><description><![CDATA[<p>Wobei Ungleichheit schneller geprüft ist, denn dabei muss nur der Speicher verglichen werden ohne die Wertsemantik verstehen zu müssen. Kann der Compiler das denn nicht optimieren, sodass der Code übersichtlich(er) ist? C++-Compiler sind ja eh Multi-Pass also ist es kein allzu grosser Schritt mehr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018002</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 07 Feb 2011 21:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to Übersetzungsunterschied on Mon, 07 Feb 2011 21:29:14 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Wobei Ungleichheit schneller geprüft ist</p>
</blockquote>
<p>Bei einem &quot;int&quot; ist das vollkommen egal, vorausgesetzt die Ziel-CPU unterstützt den Typ &quot;native&quot; (was meist der Fall ist).</p>
<blockquote>
<p>Kann der Compiler das denn nicht optimieren, sodass der Code übersichtlich(er) ist? C++-Compiler sind ja eh Multi-Pass also ist es kein allzu grosser Schritt mehr...</p>
</blockquote>
<p>Der Compiler kann einiges optimieren. Er kann u.U. sogar die ganze Schleife wegoptimieren, und die Variable &quot;a&quot; gleich mit. Der ganze Code wird zu &quot;nichts&quot;.</p>
<p>Bzw. falls &quot;a&quot; später noch verwendet wird, kann er immer noch die Schleife wegoptimieren, und einfach &quot;int a = 10&quot; draus machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018007</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 07 Feb 2011 21:29:14 GMT</pubDate></item><item><title><![CDATA[Reply to Übersetzungsunterschied on Mon, 07 Feb 2011 21:39:42 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht ganz worauf du hinaus willst. Warum sollte ein Compiler etwas übersichtlicher machen?!<br />
Im allgemeinen darf der Compiler die beiden Anweisungen gar nicht gleich machen. Gewisse Nebeneffekte müssen immer miteinbezogen werden.</p>
<p>MSVC++2010 macht das hier (optimiert):</p>
<pre><code class="language-cpp">while(a++ &lt; 10);
01291007  inc         ecx  
01291008  dec         eax  
01291009  jne         main+7 (1291007h)  

	int b = 0;
	while(b++ != 10);

	std::cout &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b;
0129100B  push        0Bh  
0129100D  push        ecx
</code></pre>
<p>Da siehst du, dass das erste noch explizit ausgeführt wird, während das zweite bereits berechnet wurde. Warum hier die erste Version nicht auch weiter wegoptimiert wurde kann ich nicht genau sagen, aber es werden wohl Nebeneffekte miteinbezogen, welche bei der zweiten Variante nicht passieren können.</p>
<p>btw:<br />
C++ Compiler sind eben nicht Multipass. Darum brauchst ja auch immer brav die Deklarationen von Funktionen, wenn du eine verwenden willst bevor sie definiert wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018011</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 07 Feb 2011 21:39:42 GMT</pubDate></item></channel></rss>