<?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[Seltsames Macro in GMP]]></title><description><![CDATA[<p>Hallo,<br />
ich habe gerade einen Header der GMP library angeschaut und folgendes macro gefunden:</p>
<pre><code class="language-cpp">#define MPN_FILL(ptr, size, n)          \
  do {                                  \
    mp_size_t __i;                      \
    ASSERT ((size) &gt;= 0);               \
    for (__i = 0; __i &lt; (size); __i++)  \
      (ptr)[__i] = (n);                 \
  } while (0)
</code></pre>
<p>Warum wird hier eine do while schleife verwendet, die immer einmal ausgeführt wird. Würde das hier nicht da selbe bewirken?</p>
<pre><code class="language-cpp">define MPN_FILL(ptr, size, n)            \
  { /*neuer gültigkeitsbereich*/          \
      mp_size_t __i;                      \
      ASSERT ((size) &gt;= 0);               \
      for (__i = 0; __i &lt; (size); __i++)  \
        (ptr)[__i] = (n);                 \
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/261489/seltsames-macro-in-gmp</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 05:33:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261489.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Feb 2010 01:25:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Seltsames Macro in GMP on Fri, 19 Feb 2010 01:25:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe gerade einen Header der GMP library angeschaut und folgendes macro gefunden:</p>
<pre><code class="language-cpp">#define MPN_FILL(ptr, size, n)          \
  do {                                  \
    mp_size_t __i;                      \
    ASSERT ((size) &gt;= 0);               \
    for (__i = 0; __i &lt; (size); __i++)  \
      (ptr)[__i] = (n);                 \
  } while (0)
</code></pre>
<p>Warum wird hier eine do while schleife verwendet, die immer einmal ausgeführt wird. Würde das hier nicht da selbe bewirken?</p>
<pre><code class="language-cpp">define MPN_FILL(ptr, size, n)            \
  { /*neuer gültigkeitsbereich*/          \
      mp_size_t __i;                      \
      ASSERT ((size) &gt;= 0);               \
      for (__i = 0; __i &lt; (size); __i++)  \
        (ptr)[__i] = (n);                 \
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1858006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858006</guid><dc:creator><![CDATA[asdasdf]]></dc:creator><pubDate>Fri, 19 Feb 2010 01:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to Seltsames Macro in GMP on Fri, 19 Feb 2010 01:43:12 GMT]]></title><description><![CDATA[<p>Vielleic´ht geht es ums Semikolon am ENde.</p>
<p>if(bla())<br />
MPN_FILL(...);&lt;--!!<br />
else</p>
<p>(Gar nicht durchdacht, aber dazu bist Du ja da, war nur so einme Idee.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858012</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 19 Feb 2010 01:43:12 GMT</pubDate></item><item><title><![CDATA[Reply to Seltsames Macro in GMP on Fri, 19 Feb 2010 21:01:41 GMT]]></title><description><![CDATA[<p>Es geht ums Semikolon, vor allem bei if abfragen ohne geschweifte Klammern. (Wie volkard schon gesagt hat)</p>
<p>Hier noch ein erklaerendes Beispiel (aus der Wikipedia)</p>
<pre><code class="language-cpp">// Variante 1
#define CMDS \
  do { \
    a = b; \
    c = d; \
  } while (0)

// Variante 2
#define CMDS \
  { \
    a = b; \
    c = d; \
  }
</code></pre>
<p>Das Beispiel, welches mit Variante 2 nicht funktioniert:</p>
<pre><code class="language-cpp">if (var == 13)
    CMDS;
  else
    return;

// Variante 1 wird zu
// (Keine Probleme)
if (var == 13)
    do {
      a = b;
      c = d;
    } while (0);
  else
    return;

// Variante 2 wird zu
if (var == 13) {
      a = b;
      c = d;
  }
  ;  
  else // Syntax error wegen dem zusaetzlichen ; (empty statement)
    return;
</code></pre>
<p>Hier der Artikel: <a href="http://en.wikipedia.org/wiki/C_preprocessor" rel="nofollow">http://en.wikipedia.org/wiki/C_preprocessor</a>, das steht das alles.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858422</guid><dc:creator><![CDATA[lustig]]></dc:creator><pubDate>Fri, 19 Feb 2010 21:01:41 GMT</pubDate></item></channel></rss>