<?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[X++ oder ++X?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe schon ein paar C++ Programme von anderen ForumMitglidern gesehen und habe manchmal das Gefühl als würden manche den Unterschied zwischen X++ und ++X nicht verstehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Das ist nähmlich ein größerer Unterschied als manche annehmen.</p>
<p>Um gleich auf den Punkt zu kommen:</p>
<p>bei ++X wird die Variable X um eins erhöht.<br />
bei X++ wird der Wert der Variable X zwischen gespeichert (also eine Kopie wird erstellt), und dann wird X um eins erhöht.</p>
<p>in einer &quot;for&quot;- Schleife ist es daher überflüssig X++ zu schreiben es sei denn man macht es absichtlich wie z.B.:</p>
<pre><code class="language-cpp">for (int X = 0; X++ &lt; 10; ) {}
</code></pre>
<p>aber hier ist es überflüssig:</p>
<pre><code class="language-cpp">/* etwas langsamer */
for (int X = 0; X &lt; 10; X++) {}
/* etwas schneller */
for (int X = 0; X &lt; 10; ++X) {}
</code></pre>
<p>Der Unterschied der Geschwindigkeit ist zwar minimal aber es ist, vorallem wenn man die Vraibale ausgiebt und gleichzeitig erhöht oder um eins verkleinert, eben doch nicht das Gleiche! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>(Dieser Thread wurde nicht erstellt weil ich mich darüber ärgere, dient ausschließlich als Information) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Gruß LukasBanana</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177560/x-oder-x</link><generator>RSS for Node</generator><lastBuildDate>Thu, 25 Jun 2026 03:23:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177560.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Apr 2007 17:30:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 17:30:57 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe schon ein paar C++ Programme von anderen ForumMitglidern gesehen und habe manchmal das Gefühl als würden manche den Unterschied zwischen X++ und ++X nicht verstehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Das ist nähmlich ein größerer Unterschied als manche annehmen.</p>
<p>Um gleich auf den Punkt zu kommen:</p>
<p>bei ++X wird die Variable X um eins erhöht.<br />
bei X++ wird der Wert der Variable X zwischen gespeichert (also eine Kopie wird erstellt), und dann wird X um eins erhöht.</p>
<p>in einer &quot;for&quot;- Schleife ist es daher überflüssig X++ zu schreiben es sei denn man macht es absichtlich wie z.B.:</p>
<pre><code class="language-cpp">for (int X = 0; X++ &lt; 10; ) {}
</code></pre>
<p>aber hier ist es überflüssig:</p>
<pre><code class="language-cpp">/* etwas langsamer */
for (int X = 0; X &lt; 10; X++) {}
/* etwas schneller */
for (int X = 0; X &lt; 10; ++X) {}
</code></pre>
<p>Der Unterschied der Geschwindigkeit ist zwar minimal aber es ist, vorallem wenn man die Vraibale ausgiebt und gleichzeitig erhöht oder um eins verkleinert, eben doch nicht das Gleiche! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>(Dieser Thread wurde nicht erstellt weil ich mich darüber ärgere, dient ausschließlich als Information) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Gruß LukasBanana</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257469</guid><dc:creator><![CDATA[LukasBanana]]></dc:creator><pubDate>Sun, 01 Apr 2007 17:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 17:36:55 GMT]]></title><description><![CDATA[<p>Irgendwo gibts nen FAQ Eintrag dazu.</p>
<p>Schau dir doch mal den Assemblercode davon an, ich würde wetten es gibt keinen unterschied bei int.</p>
<p>Nie wieder Krieg, nie mehr Las Vegas!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257472</guid><dc:creator><![CDATA[GGGGG]]></dc:creator><pubDate>Sun, 01 Apr 2007 17:36:55 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 17:37:56 GMT]]></title><description><![CDATA[<p>MAch doch einen Artikel für das Magazin draus? In 1,5 Wochen könnte er erscheinen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257473</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sun, 01 Apr 2007 17:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 17:45:52 GMT]]></title><description><![CDATA[<p>GGGGG schrieb:</p>
<blockquote>
<p>Schau dir doch mal den Assemblercode davon an, ich würde wetten es gibt keinen unterschied bei int.</p>
</blockquote>
<p>das Thema hatte ich letztens erst mit einigen Leute &quot;diskutiert&quot; ++X ist schneller weil du dir theoretisch ein MOV sparst. Theoretisch deshalb weil ein compiler eigentlich erkennen sollte, ob es die &quot;temporäre&quot; variable braucht und aufgrund dieser Erkenntnis die optimierte Version verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257483</guid><dc:creator><![CDATA[DoomWarrior]]></dc:creator><pubDate>Sun, 01 Apr 2007 17:45:52 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 17:49:23 GMT]]></title><description><![CDATA[<blockquote>
<p>MAch doch einen Artikel für das Magazin draus? In 1,5 Wochen könnte er erscheinen.</p>
</blockquote>
<p>Ja, ein Artikel über Debugger wäre super ! Also wie man mit einem Debugger umgeht, was der Assemblercode bedeutet etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257488</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sun, 01 Apr 2007 17:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 17:58:12 GMT]]></title><description><![CDATA[<p>War garnicht so einfach was zu machen, bei dem nicht alles wegoptimiert wird.</p>
<pre><code class="language-cpp">int main(int argc, char *argv[]) {
	int m = 0;
	for (int X = 0; X &lt; argc; X++) {
		m*=argc;
	}

	return m;
}
</code></pre>
<pre><code class="language-asm">;	COMDAT _main
_TEXT	SEGMENT
_argc$ = 8						; size = 4
_argv$ = 12						; size = 4
_main	PROC NEAR					; COMDAT

; 3    : 	for (int X = 0; X &lt; argc; X++) {

	mov	ecx, DWORD PTR _argc$[esp-4]
	xor	eax, eax
	test	ecx, ecx
	jle	SHORT $L276

; 2    : 	int m = 0;

	mov	edx, ecx
	npad	4
$L274:

; 4    : 		m*=argc;

	imul	eax, ecx
	dec	edx
	jne	SHORT $L274
$L276:

; 5    : 	}
; 6    : 
; 7    : 	return m;
; 8    : }

	ret	0
</code></pre>
<pre><code class="language-cpp">int main(int argc, char *argv[]) {
	int m = 0;
	for (int X = 0; X &lt; argc; ++X) {
		m*=argc;
	}

	return m;
}
</code></pre>
<pre><code class="language-asm">_TEXT	SEGMENT
_argc$ = 8						; size = 4
_argv$ = 12						; size = 4
_main	PROC NEAR					; COMDAT

; 3    : 	for (int X = 0; X &lt; argc; ++X) {

	mov	ecx, DWORD PTR _argc$[esp-4]
	xor	eax, eax
	test	ecx, ecx
	jle	SHORT $L276

; 2    : 	int m = 0;

	mov	edx, ecx
	npad	4
$L274:

; 4    : 		m*=argc;

	imul	eax, ecx
	dec	edx
	jne	SHORT $L274
$L276:

; 5    : 	}
; 6    : 
; 7    : 	return m;
; 8    : }

	ret	0
</code></pre>
<p>=&gt; Der Compiler macht was ganz anderes draus, als man denkt, aber beides mal das gleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257508</guid><dc:creator><![CDATA[GGGGG]]></dc:creator><pubDate>Sun, 01 Apr 2007 17:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 17:59:39 GMT]]></title><description><![CDATA[<p>Welche IDE verwendest du ? Hast du des durch den Laufzeitdisassembler gejagt, oder erst die fertige EXE disassembliert ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257511</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sun, 01 Apr 2007 17:59:39 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 18:01:59 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>mikey schrieb:</p>
<blockquote>
<blockquote>
<p>MAch doch einen Artikel für das Magazin draus? In 1,5 Wochen könnte er erscheinen.</p>
</blockquote>
<p>Ja, ein Artikel über Debugger wäre super ! Also wie man mit einem Debugger umgeht, was der Assemblercode bedeutet etc.</p>
</blockquote>
<p>Es gibt bereits einen Artikel, der sich mit dem Debuggen beschäftigt und zwar von estartu.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257520</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 01 Apr 2007 18:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 18:07:26 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>Welche IDE verwendest du ? Hast du des durch den Laufzeitdisassembler gejagt, oder erst die fertige EXE disassembliert ?</p>
</blockquote>
<p>VS 2003. Assemblyausgabe: Assembly mit Quellcode (/Fas) eingestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257534</guid><dc:creator><![CDATA[GGGGG]]></dc:creator><pubDate>Sun, 01 Apr 2007 18:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 18:13:17 GMT]]></title><description><![CDATA[<p>Wenn ich eine Variable auf dem Stack anlege:</p>
<pre><code class="language-cpp">int i = 0;
</code></pre>
<p>...sieht der dazugehörige Assemblercode so aus:</p>
<pre><code>0x40136b	movl   $0x0,0xfffffff8(%ebp)
</code></pre>
<p>Ich kenne nur den Befehl MOV, der hat folgende Syntax:</p>
<p><em>mov Ziel, Quelle</em></p>
<p>Was bedeutet dann 'movl' ? Scheint so, als würde als erster Parameter der zu kopierende Wert (0x0 == 0) stehen, und im zweiten das Ziel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257544</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sun, 01 Apr 2007 18:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 18:27:23 GMT]]></title><description><![CDATA[<p>Ist zwar schon ne weile her, dass ich Assembler hatte, aber ich versuchs mal zu erklären.</p>
<pre><code class="language-asm">;	COMDAT _main
_TEXT	SEGMENT
_argc$ = 8						; size = 4
_argv$ = 12						; size = 4
_main	PROC NEAR					; COMDAT

; 3    : 	for (int X = 0; X &lt; argc; X++) {

	mov	ecx, DWORD PTR _argc$[esp-4] ;argc wird in ecx geschrieben
	xor	eax, eax ; eax auf 0 setzen eax = m
	test	ecx, ecx ; schauen ob garnix zu tun ist (argc == 0)
	jle	SHORT $L276

; 2    : 	int m = 0;

	mov	edx, ecx ; edx =  argc
	npad	4 ; keine Ahnung
$L274:

; 4    : 		m*=argc;

	imul	eax, ecx ; m*=argc;
	dec	edx ; 1 von edx abziehen (das X++ oder ++X)
	jne	SHORT $L274 ; prüfen, ob fertig (ist wohl equal, wenn dec edx 0 liefert)
$L276:

; 5    : 	}
; 6    : 
; 7    : 	return m;
; 8    : }

	ret	0
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1257557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257557</guid><dc:creator><![CDATA[GGGGG]]></dc:creator><pubDate>Sun, 01 Apr 2007 18:27:23 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Sun, 01 Apr 2007 18:39:55 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>Was bedeutet dann 'movl' ? Scheint so, als würde als erster Parameter der zu kopierende Wert (0x0 == 0) stehen, und im zweiten das Ziel...</p>
</blockquote>
<p>soweit ich mich entsinne move long, witzigerweise stehts nicht in meiner Assembler referenz. Warum QUELLE und ZIEL da gedreht ist weiß auch nur Gott... Ich 'liebe' CISC-Wirrwar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257569</guid><dc:creator><![CDATA[DoomWarrior]]></dc:creator><pubDate>Sun, 01 Apr 2007 18:39:55 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Mon, 02 Apr 2007 10:43:03 GMT]]></title><description><![CDATA[<p>DoomWarrior schrieb:</p>
<blockquote>
<p>mikey schrieb:</p>
<blockquote>
<p>Was bedeutet dann 'movl' ? Scheint so, als würde als erster Parameter der zu kopierende Wert (0x0 == 0) stehen, und im zweiten das Ziel...</p>
</blockquote>
<p>soweit ich mich entsinne move long, witzigerweise stehts nicht in meiner Assembler referenz. Warum QUELLE und ZIEL da gedreht ist weiß auch nur Gott... Ich 'liebe' CISC-Wirrwar</p>
</blockquote>
<p>Das is nur die GAS-Syntax. Du hast den Code wohl mim gcc kompiliert, der spuckt gas-Syntax aus, weil er als Assembler gas hernimmt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Grob gesagt:<br />
Ein Befehl kriegt ein Postfix (das l), das die Größe angibt, Ziel und Quelle werden umgedreht, Register haben ein % davor, ...<br />
Kann sein, dass die Beschreibung nich genau stimmt, is ewig her, dass ich das letzte mal was damit gemacht hab <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257829</guid><dc:creator><![CDATA[YASC]]></dc:creator><pubDate>Mon, 02 Apr 2007 10:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to X++ oder ++X? on Mon, 02 Apr 2007 11:24:56 GMT]]></title><description><![CDATA[<ol>
<li>der generierte Code wird gleich aussehen</li>
<li>wers ausprobieren will:</li>
</ol>
<pre><code class="language-cpp">int volatile v;
void test()
{
    for(int i = 0; i &lt; 1000; i++)
        v = i;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1257849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257849</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 02 Apr 2007 11:24:56 GMT</pubDate></item></channel></rss>