<?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[Addition von #define]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe hier ein kleines Verständnisproblem und hoffe, es kann mir jemand von euch helfen.</p>
<p>Ich habe ein #define für eine Basis-Adresse:</p>
<p>#define BASE_ADDRESS 0x50000000</p>
<p>Darauf aufbauend möchte ich nun eine Adresse definieren, die auf der Basis-Adresse aufbaut. Hier kommt nur mein Problem in's Spiel.</p>
<p>Ich habe das auf zwei Varianten gemacht:</p>
<p>Variante 1:</p>
<p>#define ADDRESS 0x50000000 + 0x00000100</p>
<p>int* ptr;<br />
ptr = (int*)ADDRESS;</p>
<p>Variante 2:</p>
<p>#define ADDRESS (0x50000000 + 0x00000100)</p>
<p>unsigned long* ptr;<br />
ptr = (int*)ADDRESS;</p>
<p>Die beiden Varianten unterscheiden sich also nur in den Klammern beim #define.<br />
Wenn ich mir nun mit</p>
<p>printf(&quot;ptr-address: 0x%x&quot;, ptr);</p>
<p>die Adresse ausgeben lasse, auf die &quot;ptr&quot; Zeigt, dann habe ich zwei unterschiedliche Ausgaben:</p>
<p>Variante 1:<br />
ptr-address: 0x50001000</p>
<p>Variante 2:<br />
ptr-address: 0x50000100</p>
<p>Kann mir das jemand erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286122/addition-von-define</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 00:50:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286122.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 May 2011 19:59:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Addition von #define on Tue, 03 May 2011 19:59:17 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe hier ein kleines Verständnisproblem und hoffe, es kann mir jemand von euch helfen.</p>
<p>Ich habe ein #define für eine Basis-Adresse:</p>
<p>#define BASE_ADDRESS 0x50000000</p>
<p>Darauf aufbauend möchte ich nun eine Adresse definieren, die auf der Basis-Adresse aufbaut. Hier kommt nur mein Problem in's Spiel.</p>
<p>Ich habe das auf zwei Varianten gemacht:</p>
<p>Variante 1:</p>
<p>#define ADDRESS 0x50000000 + 0x00000100</p>
<p>int* ptr;<br />
ptr = (int*)ADDRESS;</p>
<p>Variante 2:</p>
<p>#define ADDRESS (0x50000000 + 0x00000100)</p>
<p>unsigned long* ptr;<br />
ptr = (int*)ADDRESS;</p>
<p>Die beiden Varianten unterscheiden sich also nur in den Klammern beim #define.<br />
Wenn ich mir nun mit</p>
<p>printf(&quot;ptr-address: 0x%x&quot;, ptr);</p>
<p>die Adresse ausgeben lasse, auf die &quot;ptr&quot; Zeigt, dann habe ich zwei unterschiedliche Ausgaben:</p>
<p>Variante 1:<br />
ptr-address: 0x50001000</p>
<p>Variante 2:<br />
ptr-address: 0x50000100</p>
<p>Kann mir das jemand erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058101</guid><dc:creator><![CDATA[ape4711]]></dc:creator><pubDate>Tue, 03 May 2011 19:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Tue, 03 May 2011 20:02:46 GMT]]></title><description><![CDATA[<p>ups - der Pointer in Variante 2 sollte eigentlich auch ein int-Pointer sein. <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 />
Also:</p>
<p>Variante 2:</p>
<p>#define ADDRESS (0x50000000 + 0x00000100)</p>
<p>int* ptr;<br />
ptr = (int*)ADDRESS;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058103</guid><dc:creator><![CDATA[ape4711]]></dc:creator><pubDate>Tue, 03 May 2011 20:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Tue, 03 May 2011 20:07:51 GMT]]></title><description><![CDATA[<p>Ja, das ist ein sehr häufiges Problem, das man mit Makros hat. In C++ solltest du dafür lieber Konstanten verwenden:</p>
<pre><code class="language-cpp">const int ADDRESS = 0x50000000 + 0x00000100;
</code></pre>
<p>Denn die Variante ohne Klammern expandiert zu:</p>
<pre><code class="language-cpp">int* ptr;
ptr = ((int*) 0x50000000) + 0x00000100;
</code></pre>
<p>Das heißt der erste Wert (0x50000000) wird zunächst in eine Adresse gecastet und dann um 100 erhöht.</p>
<p>Während bei der Variante mit Klammern zunächst beide Werte addiert und erst danach in eine Adresse gecastet werden:</p>
<pre><code class="language-cpp">int* ptr;
ptr = (int*) (0x50000000 + 0x00000100);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2058106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058106</guid><dc:creator><![CDATA[jhkhjk]]></dc:creator><pubDate>Tue, 03 May 2011 20:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Tue, 03 May 2011 20:48:05 GMT]]></title><description><![CDATA[<p>jhkhjk schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int* ptr;
ptr = ((int*) 0x50000000) + 0x00000100;
</code></pre>
</blockquote>
<p>Das stimmt so nicht ganz. Es expandiert zu</p>
<pre><code class="language-cpp">int* ptr;
ptr = (int*) 0x50000000 + 0x00000100;
</code></pre>
<p>Makros sind nur dumme Textersetzung, d.h. alle ADDRESS werden durch die im define folgende Zeichenkette ersetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058124</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 03 May 2011 20:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Wed, 04 May 2011 05:57:06 GMT]]></title><description><![CDATA[<p>Erstmal vielen Dank für eure Antworten.</p>
<p>@manni66:<br />
Aber warum geht es dann schief?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058197</guid><dc:creator><![CDATA[ape4711]]></dc:creator><pubDate>Wed, 04 May 2011 05:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Wed, 04 May 2011 06:04:57 GMT]]></title><description><![CDATA[<p>Achso - es ist also trotdzem der Fall, dass 0x50000000 in eine Adresse gecastet und anschließend um 100 erhöht wird.<br />
Ist das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058199</guid><dc:creator><![CDATA[ape4711]]></dc:creator><pubDate>Wed, 04 May 2011 06:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Wed, 04 May 2011 07:26:57 GMT]]></title><description><![CDATA[<p>ape4711 schrieb:</p>
<blockquote>
<p>Achso - es ist also trotdzem der Fall, dass 0x50000000 in eine Adresse gecastet und anschließend um 100 erhöht wird.<br />
Ist das so richtig?</p>
</blockquote>
<p>um 0x100, ja. Ist aber auch egal, nimm Konstanten an Stelle von #defines, und ales wird gut. Du sparst dir damit auch jede Menge anderer Scherereien. (Glaubs mir, ich hab auf Arbeit in den letzten Wochen genug Zeit mit den Auswirkungen einer Projektweiten #define-Seuche zu tun gehabt...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058219</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 04 May 2011 07:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Wed, 04 May 2011 17:38:55 GMT]]></title><description><![CDATA[<p>Bei der Variante ohne Klammern wird der Wert des Pointers (0x5000...) nicht um 0x100 erhöht, sondern um 0x100 * sizeof(int).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058566</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 04 May 2011 17:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to Addition von #define on Thu, 05 May 2011 05:29:43 GMT]]></title><description><![CDATA[<p>Richtig, du hast Recht.</p>
<p>... um 0x100 Pointerelemente eben.<br />
Jetzt hab ich's komplett gecheckt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vielen Dank für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058783</guid><dc:creator><![CDATA[ape4711]]></dc:creator><pubDate>Thu, 05 May 2011 05:29:43 GMT</pubDate></item></channel></rss>