<?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[#define Makros mit Body?]]></title><description><![CDATA[<p>Mir ist gerade aufgefallen, dass mir nicht klar ist, wie z.B. Boost test Makros definiert, die einen Body haben können:</p>
<pre><code class="language-cpp">BOOST_AUTO_TEST_CASE(test_call)
{
   BOOST_CHECK(1==1);
}
</code></pre>
<p>Ich hab versucht die Define auflösung anzugucken, werde aber nicht schlau draus.<br />
Ist es möglich einen Code Body in Makros, so wie oben zu verpacken (muss ja, weils geht <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="😃"
    /> ? Oder wird das innere irgendwie aufgelöst?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247909/define-makros-mit-body</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 08:07:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247909.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Aug 2009 12:27:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to #define Makros mit Body? on Mon, 17 Aug 2009 12:27:26 GMT]]></title><description><![CDATA[<p>Mir ist gerade aufgefallen, dass mir nicht klar ist, wie z.B. Boost test Makros definiert, die einen Body haben können:</p>
<pre><code class="language-cpp">BOOST_AUTO_TEST_CASE(test_call)
{
   BOOST_CHECK(1==1);
}
</code></pre>
<p>Ich hab versucht die Define auflösung anzugucken, werde aber nicht schlau draus.<br />
Ist es möglich einen Code Body in Makros, so wie oben zu verpacken (muss ja, weils geht <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="😃"
    /> ? Oder wird das innere irgendwie aufgelöst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762286</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Mon, 17 Aug 2009 12:27:26 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Mon, 17 Aug 2009 12:32:02 GMT]]></title><description><![CDATA[<p>Einfaches, aber sinnloses Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#define LOOP(name,limit) for(int name = 0; name &lt; limit; ++name)

int main()
{
    LOOP(i, 10)
    {
        std::cout &lt;&lt; i;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1762290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762290</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 17 Aug 2009 12:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Mon, 17 Aug 2009 12:33:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define BOOST_AUTO_TEST_CASE(cases) if((globalcasemask|cases)!=0)
#define BOOST_CHECK(condition) assert(consition)
</code></pre>
<p>würde ja schon reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762291</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 17 Aug 2009 12:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Mon, 17 Aug 2009 12:49:29 GMT]]></title><description><![CDATA[<p>Ja, aber BOOST_AUTO_TEST_CASE macht ne Ecke mehr, es registriert beleibig viele Test Cases in einer Suite und dient als main ersatz, kann dabei jedoch beliebig oft vorkommen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762311</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Mon, 17 Aug 2009 12:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Mon, 17 Aug 2009 13:13:27 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Ja, aber BOOST_AUTO_TEST_CASE macht ne Ecke mehr, es registriert beleibig viele Test Cases in einer Suite und dient als main ersatz, kann dabei jedoch beliebig oft vorkommen</p>
</blockquote>
<p>Mal schaun, ob ich sowas auch kann...</p>
<pre><code class="language-cpp">//.h
#define BOOST_AUTO_TEST_CASE(funktionsname) \
void funktionsname(); \
namespace { bool dummy=registerCase(#funktionsname,&amp;funktionsname); } \
inline void funktionsname()
</code></pre>
<p>nebst</p>
<pre><code class="language-cpp">//.cpp
std::map&lt;std::string,void(*)()&gt; tests;
bool registerCase(char const* name,void(*f)())
{
   tests[name]=f;
   return true;
}
</code></pre>
<p>nebst</p>
<pre><code class="language-cpp">extern std::map&lt;std::string,void(*)()&gt; tests;
int main()
{
   for each name,func in tests
   {
      cout&lt;&lt;&quot;testing &quot;&lt;&lt;name&lt;&lt;&quot;...\n&quot;;
      (*f)();
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1762325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762325</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 17 Aug 2009 13:13:27 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Mon, 17 Aug 2009 13:35:29 GMT]]></title><description><![CDATA[<p>Ahhh, das sieht einleuchtend aus, also es wirkt auf jeden Fall einleuchtender, als der Sourc von Boost. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762343</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Mon, 17 Aug 2009 13:35:29 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Tue, 18 Aug 2009 13:47:16 GMT]]></title><description><![CDATA[<p>Im folgenden kriegt man das markierte nicht durch ein einziges makro extrahiert, oder? Da muss sowas wie MACRO_ANFANG und MACRO_ENDE gesetzt werden.</p>
<pre><code class="language-cpp">while(condition)
{
  if(foo)
  { 
    mach was
  }
  else
  {
    //Markierung
  }
}
</code></pre>
<pre><code class="language-cpp">MACRO()
{
  // Markierung
}

wobei
#define MACRO() while(condition) ... ist
</code></pre>
<p>Würde nicht gehen, weil die letzte geschweifte Klammer nicht mitgenommen wird, richtig?<br />
Geht das nur über ein zweites Macro oder über ein ziemlich häßliches</p>
<pre><code class="language-cpp">MACRO()
{
  // Markierung
}
}
</code></pre>
<p>Ich will es so einfach wie möglich halten und nicht so etwas wie anonyme funktionen oder delegaten benutzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762904</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Tue, 18 Aug 2009 13:47:16 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Tue, 18 Aug 2009 13:58:27 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Im folgenden kriegt man das markierte nicht durch ein einziges makro extrahiert, oder? Da muss sowas wie MACRO_ANFANG und MACRO_ENDE gesetzt werden.</p>
<pre><code class="language-cpp">while(condition)
{
  if(foo)
  { 
    mach was
  }
  else
  {
    //Markierung
  }
}
</code></pre>
<p>wobei<br />
#define MACRO() while(condition) ... ist[/cpp]</p>
</blockquote>
<pre><code class="language-cpp">#define MACRO(condition) \
while (condition)        \
 if (!foo || (machwas(), false))

int bar()
{
  int i = 0;
  MACRO(i != 10)
  {
    ++i;
  }
}[cpp]

wird zu 
[cpp]
int bar()
{
  int i = 0;
  while(i != 10)
    if(!foo || (machwas(), false))
    {
      ++i;
    }
}
</code></pre>
<p>falls !foo ergibt, wird die zweite Bedingung des op|| nicht ausgewertet und ++i ausgeführt.<br />
falls foo true ist, ergibt !foo false, es wird (machwas(), false) ausgewertet,also machwas() ausgeführt und false zurückgegeben.<br />
Sowas ist aber böse Makro-Hackerei und kann auch anderweitig erledigt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762912</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 18 Aug 2009 13:58:27 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Tue, 18 Aug 2009 14:11:23 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Im folgenden kriegt man das markierte nicht durch ein einziges makro extrahiert, oder? Da muss sowas wie MACRO_ANFANG und MACRO_ENDE gesetzt werden.</p>
<pre><code class="language-cpp">while(condition)
{
  if(foo)
  { 
    mach was
  }
  else
  {
    //Markierung
  }
}
</code></pre>
</blockquote>
<p>Entweder BEGIN/END oder schwarzes Hacken oder Erkennen, daß die äußeren Klammern total nutzlos waren. :p</p>
<pre><code class="language-cpp">while(condition)
  if(foo)
  { 
    mach was
  }
  else
  {
    //Markierung
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1762921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762921</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 18 Aug 2009 14:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to #define Makros mit Body? on Tue, 18 Aug 2009 14:33:17 GMT]]></title><description><![CDATA[<p>Ist ja nur ein beispiel. Die sitation ist schon so, das dort noch mehr befehle außerhalb der ifs gekapselt sind</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762930</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Tue, 18 Aug 2009 14:33:17 GMT</pubDate></item></channel></rss>