<?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[Makro zum pointerlöschen, geht nicht!]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe grade mal mich bisschen in makros versucht, und hab auch schon ein problem!</p>
<p>Ich dachte, ich schreibe ein makro, zum löschen von zeigern:</p>
<pre><code class="language-cpp">#define DELETE(*pointer)   \
{                          \
 delete pointer;           \
 pointer=0;                \
}
</code></pre>
<p>nun bekomm ich</p>
<pre><code>Fehler in der Makro-Argumentsyntax
</code></pre>
<p>kann ich sowas gar nicht machen?</p>
<p>und noch eine (andere) frage, wofür setzt man makros wirklich sinnvoll ein?</p>
<p>Wieso machen die c++ code tags das nicht grün?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133359/makro-zum-pointerlöschen-geht-nicht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 21:55:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133359.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Jan 2006 09:07:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Makro zum pointerlöschen, geht nicht! on Tue, 17 Jan 2006 09:07:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe grade mal mich bisschen in makros versucht, und hab auch schon ein problem!</p>
<p>Ich dachte, ich schreibe ein makro, zum löschen von zeigern:</p>
<pre><code class="language-cpp">#define DELETE(*pointer)   \
{                          \
 delete pointer;           \
 pointer=0;                \
}
</code></pre>
<p>nun bekomm ich</p>
<pre><code>Fehler in der Makro-Argumentsyntax
</code></pre>
<p>kann ich sowas gar nicht machen?</p>
<p>und noch eine (andere) frage, wofür setzt man makros wirklich sinnvoll ein?</p>
<p>Wieso machen die c++ code tags das nicht grün?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968642</guid><dc:creator><![CDATA[Makroprob]]></dc:creator><pubDate>Tue, 17 Jan 2006 09:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to Makro zum pointerlöschen, geht nicht! on Tue, 17 Jan 2006 09:20:37 GMT]]></title><description><![CDATA[<p>Man setzt in C++ Makros nur noch für plattformabhängige Code-Stücke, Include-Guards, Versionsnummern und Debugging (Asserts), manchmal auch für Metaprogrammierung (ist aber ein Haufen Arbeit) ein. Das was du da tust müsste so aussehen:</p>
<pre><code class="language-cpp">#define DELETE(pointer) \
{ \
    delete pointer; \
    pointer = 0; \
}
</code></pre>
<p>Wie du siehst ist in keinster Weise gewährleistet, dass ein Zeiger übergeben wird, was letztlich zu sehr kryptischen Fehlern führt.</p>
<p>So schauts in C++ aus:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
inline void safe_delete (const T*&amp; pointer)
{
    delete pointer;
    pointer = 0;
}
</code></pre>
<p>Das ist erstens typsicher, zweitens tut es genau das, was du willst und drittens hat es durch das inline prinzipiell genau den selben Effekt.</p>
<p>Falls du es zu einer globalen Vorgabe machen willst, dass Zeiger nach delete 0 sind, kannst du auch den operator delete überladen.</p>
<p>Nimm auf jeden Fall Abstand von Makros, die sind <strong>böse</strong>!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968650</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 17 Jan 2006 09:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Makro zum pointerlöschen, geht nicht! on Tue, 17 Jan 2006 09:21:22 GMT]]></title><description><![CDATA[<p>Makroprob schrieb:</p>
<blockquote>
<p>kann ich sowas gar nicht machen?</p>
</blockquote>
<p>Doch, aber in der Definition ist ein * zu viel:<br />
[cpp]#define DELETE(p) {delete p;p=0;}</p>
<blockquote>
<p>und noch eine (andere) frage, wofür setzt man makros wirklich sinnvoll ein?</p>
</blockquote>
<p>Unter C++ fällt mir nichts sinnvolles ein - da sind templates und inline-Funktionen sicherer. Unter C kann man damit etwas ähnliches wie eine Inline-Funktion erzeugen.</p>
<blockquote>
<p>Wieso machen die c++ code tags das nicht grün?</p>
</blockquote>
<p>Was soll grün gemacht werden? (das Forum färbt Kommentare grün ein)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968651</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Tue, 17 Jan 2006 09:21:22 GMT</pubDate></item></channel></rss>