<?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[man kann es aufrufen??]]></title><description><![CDATA[<pre><code class="language-cpp">class test {
public:
	void hallo() {
		printf(&quot;Hallo\n&quot;);
	}
};
</code></pre>
<pre><code class="language-cpp">test *ptr = 0;
	ptr-&gt;hallo();
</code></pre>
<p>man kann es ja so aufrufen aber muss dies immer funktionieren oder kann ein compiler es auch in einen code übersetzen, dass es nicht funktioniert? oder geht es IMMER?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241886/man-kann-es-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 06:40:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241886.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 May 2009 08:36:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 08:36:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class test {
public:
	void hallo() {
		printf(&quot;Hallo\n&quot;);
	}
};
</code></pre>
<pre><code class="language-cpp">test *ptr = 0;
	ptr-&gt;hallo();
</code></pre>
<p>man kann es ja so aufrufen aber muss dies immer funktionieren oder kann ein compiler es auch in einen code übersetzen, dass es nicht funktioniert? oder geht es IMMER?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716547</guid><dc:creator><![CDATA[sk7p]]></dc:creator><pubDate>Wed, 27 May 2009 08:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 08:39:57 GMT]]></title><description><![CDATA[<p>wenn ptr 0 ist, kann <em>ptr-&gt;hallo();</em> schon mal garnicht gehen, ausser dein objekt beginnt an der adresse 0, aber das ist unwahrscheinlich.<br />
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716552</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 27 May 2009 08:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 08:41:00 GMT]]></title><description><![CDATA[<p>aber es geht doch im visual studio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716556</guid><dc:creator><![CDATA[sk7p]]></dc:creator><pubDate>Wed, 27 May 2009 08:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 08:43:08 GMT]]></title><description><![CDATA[<p>Wie, es geht im Visual Studio? Meinst du die Autovervollständigung? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Ja, die analysiert eben nur die Struktur der Programmteile, nicht die momentane Aufrufbarkeit bezüglich eines aktuellen Programmzustandes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716558</guid><dc:creator><![CDATA[marco.b]]></dc:creator><pubDate>Wed, 27 May 2009 08:43:08 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 08:50:39 GMT]]></title><description><![CDATA[<p>nein der compiler übersetzt es doch in einen normale funktionsaufruf mit call und er tut den this ptr in den [ecx]. die funktion benutzt ja this nicht..aber macht ein compiler dies immer so?muss es IMMER funktionieren? wie kann ein compiler es denn sonst noch machen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716565</guid><dc:creator><![CDATA[sk7p]]></dc:creator><pubDate>Wed, 27 May 2009 08:50:39 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 08:57:19 GMT]]></title><description><![CDATA[<p>Es ist schlicht und einfach undefiniert. Hier eine Diskussion, welche erst kürzlich stattgefunden hat:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-240859.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-240859.html</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716567</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 27 May 2009 08:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 08:58:54 GMT]]></title><description><![CDATA[<p>Jede Klassenmethode erhält einen internen Parameter, welcher die Adresse der Instanz erhält.<br />
Zur Laufzeit(!) (nicht vom Compiler) kann nun geprüft werden, ob die Adresse der Klasseninstanz auf einen sinnvollen Datenbestand zeigt. Entsprechend kann eine Exception o.Ä. fliegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716572</guid><dc:creator><![CDATA[marco.b]]></dc:creator><pubDate>Wed, 27 May 2009 08:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 09:08:44 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Es ist schlicht und einfach undefiniert.</p>
</blockquote>
<p>wieso undefiniert? dereferenzieren von nullpointern ist ein astreiner fehler, oder ist das wieder so 'ne c++ -eigenart, dass es manchmal doch geht?<br />
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716576</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 27 May 2009 09:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 09:13:09 GMT]]></title><description><![CDATA[<p>Nativ umgesetzt ist jede Klassenmethode eine statische Prozedur. Die nicht-statischen Klassenmethoden (im Sinne von C++) erhalten eben einen Zeiger auf einen Datenbestand, welcher die veränderlichen Teile einer Klasseninstanz repräsentiert.</p>
<p>Wird dieser Teil jedoch nicht benötigt, spricht ja nichts dagegen, die Klassenmethode aufzurufen, es handelt sich ja letztendlich eh nur um eine Sprungadresse, der einmalig in den Anwendungscode eingebettet ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716580</guid><dc:creator><![CDATA[marco.b]]></dc:creator><pubDate>Wed, 27 May 2009 09:13:09 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 09:19:58 GMT]]></title><description><![CDATA[<p>marco.b schrieb:</p>
<blockquote>
<p>Nativ umgesetzt ist jede Klassenmethode eine statische Prozedur. Die nicht-statischen Klassenmethoden (im Sinne von C++) erhalten eben einen Zeiger auf einen Datenbestand, welcher die veränderlichen Teile einer Klasseninstanz repräsentiert.</p>
</blockquote>
<p>Die Frage war aber, ob das so auch im C++-Standard steht und damit überall so ist. Und das ist wohl eher nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716587</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Wed, 27 May 2009 09:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 09:22:47 GMT]]></title><description><![CDATA[<p>marco.b schrieb:</p>
<blockquote>
<p>Wird dieser Teil jedoch nicht benötigt, spricht ja nichts dagegen, die Klassenmethode aufzurufen, es handelt sich ja letztendlich eh nur um eine Sprungadresse, der einmalig in den Anwendungscode eingebettet ist.</p>
</blockquote>
<p>es ist aber keine statische methode. ausserdem macht er: <em>ptr-&gt;hallo();</em> wobei ptr ein nullpointer ist. indirekte zugriffe über nullpointer sind bugs (jedenfalls in C, kann natürlich sein, dass C++ das anders sieht).<br />
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716589</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 27 May 2009 09:22:47 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 09:34:56 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>es ist aber keine statische methode. ausserdem macht er: <em>ptr-&gt;hallo();</em> wobei ptr ein nullpointer ist. indirekte zugriffe über nullpointer sind bugs (jedenfalls in C, kann natürlich sein, dass C++ das anders sieht).<br />
<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="🙂"
    /></p>
</blockquote>
<p>p-&gt;f();<br />
ist nichts anderes als<br />
f(p);</p>
<p>natürlich ist das verhalten undefiniert und wenn der compiler zB die vtable sucht macht es auch BUMM. wenn er aber keine objekt spezifischen daten (wie zB vtable oder member) braucht wird es idR gut gehen.</p>
<p>PS:<br />
vergleiche zB mit<br />
fread(0,0,0,0);<br />
das kann gut gehen (muss aber nicht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716600</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 27 May 2009 09:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 09:33:18 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-1819.html" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-8.html" rel="nofollow">Rund um die Programmierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716601</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 27 May 2009 09:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 09:56:36 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>p-&gt;f();<br />
ist nichts anderes als<br />
f(p);<br />
natürlich ist das verhalten undefiniert und wenn der compiler zB die vtable sucht macht es auch BUMM. wenn er aber keine objekt spezifischen daten (wie zB vtable oder member) braucht wird es idR gut gehen.</p>
</blockquote>
<p>mein fehler. ich hab's durch die C-brille gesehen. in C wäre p ein function pointer, der für einen erfolgreichen aufruf von f() natürlich nicht 0 sein darf.</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>vergleiche zB mit<br />
fread(0,0,0,0);<br />
das kann gut gehen (muss aber nicht).</p>
</blockquote>
<p>klar, aber nur, wenn fread das 'size' argument zuerst auswertet, als 0 erkennt und sofort rausspringt. aber sobald es einen der pointer dereferenziert, kracht es.<br />
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716616</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 27 May 2009 09:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 10:06:04 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>Es ist schlicht und einfach undefiniert.</p>
</blockquote>
<p>wieso undefiniert? dereferenzieren von nullpointern ist ein astreiner fehler, oder ist das wieder so 'ne c++ -eigenart, dass es manchmal doch geht?<br />
<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="🙂"
    /></p>
</blockquote>
<p>Soweit mir bekannt ist, ist es auch in C einfach als undefiniert beschrieben. Das wird schliesslich dazu benutzt, dass der Kompiler nicht auf solche Fehler prüfen muss, weder zur Kompile- noch zur Laufzeit. Dadurch kann der Kompiler deutlich besser optimieren und die Verantwortung wird in die Hände des Programmierer gelegt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716623</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 27 May 2009 10:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 10:11:18 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>klar, aber nur, wenn fread das 'size' argument zuerst auswertet, als 0 erkennt und sofort rausspringt. aber sobald es einen der pointer dereferenziert, kracht es.<br />
<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="🙂"
    /></p>
</blockquote>
<p>selbes in c++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716627</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 27 May 2009 10:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 10:11:40 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>klar, aber nur, wenn fread das 'size' argument zuerst auswertet, als 0 erkennt und sofort rausspringt. aber sobald es einen der pointer dereferenziert, kracht es.<br />
<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="🙂"
    /></p>
</blockquote>
<p>Unter Windows vielleicht. Woanders muss das nicht so sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716628</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 27 May 2009 10:11:40 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 12:07:37 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>wieso undefiniert? dereferenzieren von nullpointern ist ein astreiner fehler, oder ist das wieder so 'ne c++ -eigenart, dass es manchmal doch geht?<br />
<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="🙂"
    /></p>
</blockquote>
<p>Wie soll sich so ein astreiner Fehler im fertigen Programm äussern? Durch abruptes Beenden des Programms? Durch eine Fehlermeldung? Durch &quot;Programm.exe funktioniert nicht mehr&quot;?</p>
<p>Beim Debuggen sollten Nullzeigerdereferenzierungen zu einer klaren Fehlermeldung führen. Im kompilierten Release-Pack dürften solche Fehler gar nicht vorkommen, aber ich würde mich nicht auf ein bestimmtes Verhalten verlassen, falls doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716719</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 27 May 2009 12:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 13:55:18 GMT]]></title><description><![CDATA[<p>EDIT:<br />
Seite 2 übersehen <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 />
Ist schon alles gesagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716767</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 27 May 2009 13:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 16:34:34 GMT]]></title><description><![CDATA[<p>Dass offsetof Makro macht doch genau dass selbe... Es holt sich über einen Nullpointer der auf den Typ der struktur gecastet wird, die Addresse eines Elements...</p>
<p>Und soweit ich weiß ist offsetof im Header</p>
<pre><code class="language-cpp">&lt;stddef.h&gt;
</code></pre>
<p>definiert...</p>
<p>Wenn da ein Nullpointerzugriff funktioniert, warum sollte er beim Funktionsaufruf nicht funktionieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716825</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Wed, 27 May 2009 16:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 17:22:15 GMT]]></title><description><![CDATA[<p>Tobias Gerg schrieb:</p>
<blockquote>
<p>Dass offsetof Makro macht doch genau dass selbe...</p>
</blockquote>
<p>Nur es ist</p>
<ol>
<li>nicht im ANSI/ISO sondern &quot;nur&quot; POSIX Standard definiert<br />
und</li>
<li>nicht definiert wie offsetof implementiert werden muss<br />
.</li>
</ol>
<p>Wenn zB bei p-&gt;f() f eine virtuelle Funktion ist, dann wuerde der Aufruf garantiert crashen da auf die vtable zugegriffen werden wuerde (die ein null pointer ja nicht hat).</p>
<p>Weiters koennte der Aufruf ja auch etwaige invarianten ueberpruefen, was wieder zugriff auf objektspezifische Daten verlangen wuerde und wir haetten wieder einen absturz.</p>
<p>deshalb ist es schon gut so, dass es undefiniert ist.<br />
wenn man weiss was man tut und die plattform kennt, kann man das fuer so sachen wie eben ein offsetof makro ausnutzen - aber prinzipiell ist es eben undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716847</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 27 May 2009 17:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to man kann es aufrufen?? on Wed, 27 May 2009 17:24:31 GMT]]></title><description><![CDATA[<p>Wie <code>offsetof</code> implementiert wird, ist nicht definiert. Wie es aussieht, ist er so in der MSVC Library umgesetzt, wobei allerdings dort schlussendlich kein Zugriff auf den Member erfolgt, sondern nur die Adresse geholt wird:</p>
<pre><code class="language-cpp">#ifdef  _WIN64
#define offsetof(s,m)   (size_t)( (ptrdiff_t)&amp;reinterpret_cast&lt;const volatile char&amp;&gt;((((s *)0)-&gt;m)) )
#else
#define offsetof(s,m)   (size_t)&amp;reinterpret_cast&lt;const volatile char&amp;&gt;((((s *)0)-&gt;m))
#endif
</code></pre>
<p>Es sieht also so aus, als wenn der MSVC dazu in der Lage ist, bzw. dadurch, dass nur die Adresse geholt wird, den Rest wohl wegoptimiert. Das heisst aber nicht, dass es dem Standard entsprechender und gültiger Code ist.<br />
In der nicht definierten Implementation nutzen die Kompiler oft ihre Eigenschaften aus, um etwas zu realisieren, verbessern oder vereinfachen.</p>
<p>Die Implementation vom TDM GCC sieht übrigens so aus:</p>
<pre><code class="language-cpp">#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716848</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 27 May 2009 17:24:31 GMT</pubDate></item></channel></rss>