<?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[Warum sind Makros *generell* &amp;quot;böse&amp;quot;?]]></title><description><![CDATA[<p>Diese Haltung liest man hier immer wieder. Gibt's dazu auch eine Begründung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192998/warum-sind-makros-generell-quot-böse-quot</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 19:08:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192998.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Sep 2007 19:07:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Thu, 20 Sep 2007 19:07:26 GMT]]></title><description><![CDATA[<p>Diese Haltung liest man hier immer wieder. Gibt's dazu auch eine Begründung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369656</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 20 Sep 2007 19:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Thu, 20 Sep 2007 19:10:23 GMT]]></title><description><![CDATA[<p>generell böse sind sie natürlich nicht, aber wenn man nicht aufpasst, kann man sich schöne fehler basteln: <em>a = MACRO(b++);</em> könnte b mehrfach hochzählen. ausserdem machen makros manchmal das debuggen schwieriger.<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/1369659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369659</guid><dc:creator><![CDATA[Apeman]]></dc:creator><pubDate>Thu, 20 Sep 2007 19:10:23 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Thu, 20 Sep 2007 19:21:35 GMT]]></title><description><![CDATA[<blockquote>
<p>ausserdem machen makros manchmal das debuggen schwieriger.</p>
</blockquote>
<p>Wenn du mal mit wxWidgets arbeitest, wirst du das auch bemerken: Da wird dann irgendwo in deinem Programm in der Zeile &quot;IMPLEMENT_APP&quot;(ein Makro) deines Programms ein Haltepunkt ausgelöst und man klickt sich durch hunderte von wxWidgets Sourcedateien, um halbwegs zu verstehen, was eigentlich passiert ist...</p>
<p>Grüße,</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369667</guid><dc:creator><![CDATA[JimmydaMage]]></dc:creator><pubDate>Thu, 20 Sep 2007 19:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Thu, 20 Sep 2007 19:26:48 GMT]]></title><description><![CDATA[<p>JimmydaMage schrieb:</p>
<blockquote>
<p>Wenn du mal mit wxWidgets arbeitest, wirst du das auch bemerken: Da wird dann irgendwo in deinem Programm in der Zeile &quot;IMPLEMENT_APP&quot;(ein Makro) deines Programms ein Haltepunkt ausgelöst und man klickt sich durch hunderte von wxWidgets Sourcedateien, um halbwegs zu verstehen, was eigentlich passiert ist...</p>
</blockquote>
<p>das habe ich mit meinen selbstgemachten makros auch schon <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/1369674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369674</guid><dc:creator><![CDATA[Apeman]]></dc:creator><pubDate>Thu, 20 Sep 2007 19:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Thu, 20 Sep 2007 22:12:54 GMT]]></title><description><![CDATA[<p>Naja, Makros können aus verschiedensten Gründen &quot;lästig&quot; sein, und man kann viel Dummfug damit treiben.</p>
<p>* Makro-Namen sind global, wenn man also nicht aufpasst und gute Namen verwendet kann es schnell zu Kollisionen kommen<br />
(gut: &quot;MY_PROJECT_NAME_XYZ&quot;, schlecht: &quot;XYZ&quot;, mies: &quot;max&quot; (siehe windows.h, DANKE MICROSOFT!!!))</p>
<p>* Makros verwirren einige &quot;Indexer&quot; ala Intelli-Sense oder den VAX C++ Indexer, weiters können einige Debugger keinen Wert beim Mouse-Over anzeigen</p>
<p>* Makros führen oft zu schlechten Compiler-Fehlermeldungen (man weiss nicht wo in dem 100 Zeilen Makro der Fehler steckt)</p>
<p>* Makros als Konstanten sind pöse weil sie nicht &quot;zuordenbar&quot; sind (static const dagegen kann man einem Namespace und/oder einer Klasse zuordnen)</p>
<p>...</p>
<p>Andrerseits finde ich Makros wie BOOST_FOREACH schon ziemlich cool.<br />
Und ich verwende selbst Makros um an gewissen Stellen Code-Duplizierung zu vermeiden (es gibt einige Sachen wo man das in C++ NUR über Makros sinnvoll hinbekommt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369766</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 20 Sep 2007 22:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 06:01:15 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Diese Haltung liest man hier immer wieder. Gibt's dazu auch eine Begründung?</p>
</blockquote>
<p>Ich habe dir das in einen anderen Thread beantwortet, hier nochmal die Links daraus:</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/z3f89ch8(vs.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/z3f89ch8(vs.80).aspx</a><br />
<a href="http://www.research.att.com/~bs/bs_faq2.html#macro" rel="nofollow">http://www.research.att.com/~bs/bs_faq2.html#macro</a></p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369828</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 21 Sep 2007 06:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 10:54:08 GMT]]></title><description><![CDATA[<p>Also ich finde while-Schleifen generell böse, weil ja eine Endlosschleife daraus werden kann <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="😃"
    /> . Nein im Ernst - Makros sind nicht generell böse, sie haben nur einige Schwächen und man sollte die Probleme kennen (so wie man wissen sollte, daß eine while-Schleife auch einen Ausgang haben sollte).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370034</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 21 Sep 2007 10:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 11:16:36 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>... Makros sind nicht generell böse, sie haben nur einige Schwächen und man sollte die Probleme kennen ...</p>
</blockquote>
<p>Ich würde eher sagen das man sich weitgehend an folgendes halten sollte:<br />
Vermeide Makros wo möglich, verwende sie wo nötig</p>
<p>Der Vergleich mit der while-Schleife hinkt imho extrem. Ich kann jedes Sprachmittel missbrauchen um Fehler zu machen. Aber nichts desto trotz sind Makros keine Sprachmittel, sondern werden im Präprozessor textuell ersetzt. An sonsten kann man ja auch Viren zusprechen, denn auch normale Programme können theoretisch einen Datenverlust auslösen.</p>
<p>Es gibt ein, zwei Ausnahmesituationen wo auch ich Makros entgegen den obigen Spruch einsetzen würde. So z.B. Bei riesigen Typlisten (macht boost glaube ich so), weil die Templateschreibweise im Vergleich sehr extrem ist (n Templateverschachtelungen bei n Typen) und zu Tipfehlern verleitet. Wenn gleich ich bislang nicht vor dem Problem stehe... der Compiler an dem ich arbeite kommt mit Templates eh nur maginal zurecht (ganz zu schweigen von STL - was ist das, kann man das essen?).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370054</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 21 Sep 2007 11:16:36 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 11:39:41 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Also ich finde while-Schleifen generell böse, weil ja eine Endlosschleife daraus werden kann <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>
</blockquote>
<p>Nicht wenn du eine Quadcore-CPU hast! Die wird eine Endlosschleife ruck zuck fertig machen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370071</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 21 Sep 2007 11:39:41 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 11:42:44 GMT]]></title><description><![CDATA[<p>Bjarne Stroustrup sagt ja selber, das nötiger Makroeinsatz zeigt, das die Sprache eine Schwäche hat. Hier kommt man dann um Makros nicht rum. Nur, das schlimme ist, das viele C++-Coder Makros benutzen, obwohl es auch mit Sprachemitteln umsetzbar wäre. Und DAS ist böse und dumm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370076</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 21 Sep 2007 11:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 13:18:59 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Aber nichts desto trotz sind Makros keine Sprachmittel, sondern werden im Präprozessor textuell ersetzt.</p>
</blockquote>
<p>Und dennoch sind Makros ein Sprachmittel. Sie sind nur nicht so sehr integriert wie viele andere. Niemand hält dich davon ab, einen Compiler zu bauen, der das alles in einem Durchgang handhabt (außer vielleicht die Vernunft ;)).</p>
<p>asc schrieb:</p>
<blockquote>
<p>Es gibt ein, zwei Ausnahmesituationen wo auch ich Makros entgegen den obigen Spruch einsetzen würde. So z.B. Bei riesigen Typlisten (macht boost glaube ich so), weil die Templateschreibweise im Vergleich sehr extrem ist (n Templateverschachtelungen bei n Typen) und zu Tipfehlern verleitet.</p>
</blockquote>
<p>Macht Boost nicht. Im Allgemeinen hast du Template-Spezialisierungen bei den MPL-Containern. Um die zu generieren wird allerdings Boost.Preprocessor verwendent, ein grauenhaftes Stück schwarze Magie…</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370149</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 21 Sep 2007 13:18:59 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 15:13:16 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Aber nichts desto trotz sind Makros keine Sprachmittel, sondern werden im Präprozessor textuell ersetzt.</p>
</blockquote>
<p>Und dennoch sind Makros ein Sprachmittel. Sie sind nur nicht so sehr integriert wie viele andere. Niemand hält dich davon ab, einen Compiler zu bauen, der das alles in einem Durchgang handhabt (außer vielleicht die Vernunft ;)).</p>
<p>asc schrieb:</p>
<blockquote>
<p>Es gibt ein, zwei Ausnahmesituationen wo auch ich Makros entgegen den obigen Spruch einsetzen würde. So z.B. Bei riesigen Typlisten (macht boost glaube ich so), weil die Templateschreibweise im Vergleich sehr extrem ist (n Templateverschachtelungen bei n Typen) und zu Tipfehlern verleitet.</p>
</blockquote>
<p>Macht Boost nicht. Im Allgemeinen hast du Template-Spezialisierungen bei den MPL-Containern. Um die zu generieren wird allerdings Boost.Preprocessor verwendent, ein grauenhaftes Stück schwarze Magie…</p>
</blockquote>
<p>Naja, Boost verwendet Makros um Template Spezialisierungen zu erstellen. Genau das mache ich z.T. auch, weil man mit Vererbung/Template-Rekursion etc. eben nicht alles erschlagen kann.<br />
Eben Dinge wie x&lt;a1&gt;, x&lt;a1, a2&gt;, x&lt;a1, a2, a3&gt; etc.<br />
Oder Templates für Calling Conventions überladen (__stdcall, __fastcall etc.).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370214</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 21 Sep 2007 15:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 16:10:24 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Naja, Boost verwendet Makros um Template Spezialisierungen zu erstellen. Genau das mache ich z.T. auch, weil man mit Vererbung/Template-Rekursion etc. eben nicht alles erschlagen kann.<br />
Eben Dinge wie x&lt;a1&gt;, x&lt;a1, a2&gt;, x&lt;a1, a2, a3&gt; etc.<br />
Oder Templates für Calling Conventions überladen (__stdcall, __fastcall etc.).</p>
</blockquote>
<p>Ja?! Das hab ich doch auch geschrieben (wenn auch nicht mit perfekter Orthographie). Ändert aber auch nichts am magischen Charakter dieser Makros ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370242</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 21 Sep 2007 16:10:24 GMT</pubDate></item><item><title><![CDATA[Reply to Warum sind Makros *generell* &amp;quot;böse&amp;quot;? on Fri, 21 Sep 2007 23:54:42 GMT]]></title><description><![CDATA[<p>Ich meine nur vielleicht hat asc genau das gemeint, dass Makros verwendet werden - nicht um Templates zu ersetzen, sondern um sie zu implementieren. Oder er hat genau das gesehen und es falsch interpretiert <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>
<p>Und ja, ist &quot;macro magic&quot;. Mal ne Abwechslung zu &quot;template magic&quot; <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/1370442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370442</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 21 Sep 2007 23:54:42 GMT</pubDate></item></channel></rss>