<?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 mit varargs]]></title><description><![CDATA[<p>Hi,</p>
<p>sagen wir ich habe eine C Funktion mit varargs:</p>
<pre><code class="language-cpp">void Log(Type t, char* format, ...);
</code></pre>
<p>Um die will ich jetzt ein Makro machen:</p>
<pre><code class="language-cpp">#define LOG_INFO(format, ...) Log(TypeInfo, format, __VA_ARGS__);
</code></pre>
<p>Das klappt auch. Das Problem ist nur, ich kann jetzt LOG_INFO() nur mit varargs benutzen. Sprich LOG_INFO(&quot;foo&quot;) geht nicht. LOG_INFO(&quot;%i&quot;, 2) hingegen geht.</p>
<p>Im Moment loese ich das mit einem 2. Makro:</p>
<pre><code class="language-cpp">#define LOG_INFO2(format) Log(TypeInfo, format);

Benutzung:
LOG_INFO(&quot;foo %i&quot;, 2)
LOG_INFO2(&quot;foo)
</code></pre>
<p>Kann man irgendwie beide Versionen (eine mit varargs, eine ohne) mit einem Makro erschlagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292429/makro-mit-varargs</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 00:14:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292429.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Sep 2011 10:57:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 10:57:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>sagen wir ich habe eine C Funktion mit varargs:</p>
<pre><code class="language-cpp">void Log(Type t, char* format, ...);
</code></pre>
<p>Um die will ich jetzt ein Makro machen:</p>
<pre><code class="language-cpp">#define LOG_INFO(format, ...) Log(TypeInfo, format, __VA_ARGS__);
</code></pre>
<p>Das klappt auch. Das Problem ist nur, ich kann jetzt LOG_INFO() nur mit varargs benutzen. Sprich LOG_INFO(&quot;foo&quot;) geht nicht. LOG_INFO(&quot;%i&quot;, 2) hingegen geht.</p>
<p>Im Moment loese ich das mit einem 2. Makro:</p>
<pre><code class="language-cpp">#define LOG_INFO2(format) Log(TypeInfo, format);

Benutzung:
LOG_INFO(&quot;foo %i&quot;, 2)
LOG_INFO2(&quot;foo)
</code></pre>
<p>Kann man irgendwie beide Versionen (eine mit varargs, eine ohne) mit einem Makro erschlagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117184</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 10:57:35 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:03:28 GMT]]></title><description><![CDATA[<p>Ich denke mal</p>
<pre><code class="language-cpp">#define LOG_INFO(...) Log(TypeInfo, __VA_ARGS__);
</code></pre>
<p>...allerdings ist das streng genommen kein C++; erst der C99-Präprozessor kann so was. Bist du vielleicht im falschen Forum gelandet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117190</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:14:42 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>...allerdings ist das streng genommen kein C++; erst der C99-Präprozessor kann so was. Bist du vielleicht im falschen Forum gelandet?</p>
</blockquote>
<p>Ist Teil von C++11 <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/2117195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117195</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:20:01 GMT]]></title><description><![CDATA[<p>Nimm doch variadic templates.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117198</guid><dc:creator><![CDATA[Ethon_notloggedin]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:20:01 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:30:50 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Ich denke mal</p>
<pre><code class="language-cpp">#define LOG_INFO(...) Log(TypeInfo, __VA_ARGS__);
</code></pre>
<p>...allerdings ist das streng genommen kein C++; erst der C99-Präprozessor kann so was. Bist du vielleicht im falschen Forum gelandet?</p>
</blockquote>
<p>Wie soll das gehen? Wenn ich varargs benutze, muss ich doch an Log() 3 Parameter uebergeben?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117201</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:30:50 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:31:54 GMT]]></title><description><![CDATA[<p>PS: Ich kann kein C++11 benutzen. Nur Standard C/C++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117202</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:35:28 GMT]]></title><description><![CDATA[<p>RibRob22 schrieb:</p>
<blockquote>
<p>Nur Standard C/C++</p>
</blockquote>
<p>Na, was denn? C++ kennt sowieso keine variadischen Makros, C schon. Und C++11 ist Standard.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117205</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:42:34 GMT]]></title><description><![CDATA[<p>Es geht also nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117208</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:45:47 GMT]]></title><description><![CDATA[<p>Ich weiß, das mag jetzt wie schwarze Magie rüberkommen, aber wieso nicht:</p>
<pre><code class="language-cpp">inline void LogInfo(char const* fmt, ...)
{
  Log(TypeInfo, fmt, ...);
}
</code></pre>
<p>Oder wie auch immer die korrekte Syntax aussieht. (Hab mich nie mit VA-Lists beschäftigt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117210</guid><dc:creator><![CDATA[Ethon_notloggedin]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:45:47 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:49:05 GMT]]></title><description><![CDATA[<p>Ethon_notloggedin schrieb:</p>
<blockquote>
<p>Ich weiß, das mag jetzt wie schwarze Magie rüberkommen, aber wieso nicht:</p>
<pre><code class="language-cpp">inline void LogInfo(char const* fmt, ...)
{
  Log(TypeInfo, fmt, ...);
}
</code></pre>
<p>Oder wie auch immer die korrekte Syntax aussieht. (Hab mich nie mit VA-Lists beschäftigt)</p>
</blockquote>
<p>die ... kann man nicht einfach weiterreichen, nur die valist die dabei rauskommt. Und dafür müsst man dann wieder ne Funküberladung machen.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117215</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:51:16 GMT]]></title><description><![CDATA[<p>Vielleicht sagste mal, was du machen willst und nicht wie du es machen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117217</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 11:57:22 GMT]]></title><description><![CDATA[<p>RibRob22 schrieb:</p>
<blockquote>
<p>PS: Ich kann kein C++11 benutzen. Nur Standard C/C++</p>
</blockquote>
<p>Was heißt denn &quot;Standard C/C++&quot; für Dich? Meinst Du C90? Oder C99? Oder C++03? Die variadischen Makros gibt's offiziell nur in C99 und C++11 und inoffiziell dort, wo der Compiler es eben als Erweiterung unterstützt. Und für &quot;C/C++&quot; gibt es keinen Standard.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117220</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 09 Sep 2011 11:57:22 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:07:36 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>RibRob22 schrieb:</p>
<blockquote>
<p>PS: Ich kann kein C++11 benutzen. Nur Standard C/C++</p>
</blockquote>
<p>Was heißt denn &quot;Standard C/C++&quot; für Dich? Meinst Du C90? Oder C99? Oder C++03? Die variadischen Makros gibt's offiziell nur in C99 und C++11 und inoffiziell dort, wo der Compiler es eben als Erweiterung unterstützt. Und für &quot;C/C++&quot; gibt es keinen Standard.</p>
</blockquote>
<p>Keine Ahnung was ich hab. Ich benutze gcc version 4.4.1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117225</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:07:36 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:14:17 GMT]]></title><description><![CDATA[<p>RibRob22 schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>RibRob22 schrieb:</p>
<blockquote>
<p>PS: Ich kann kein C++11 benutzen. Nur Standard C/C++</p>
</blockquote>
<p>Was heißt denn &quot;Standard C/C++&quot; für Dich? Meinst Du C90? Oder C99? Oder C++03? Die variadischen Makros gibt's offiziell nur in C99 und C++11 und inoffiziell dort, wo der Compiler es eben als Erweiterung unterstützt. Und für &quot;C/C++&quot; gibt es keinen Standard.</p>
</blockquote>
<p>Keine Ahnung was ich hab. Ich benutze gcc version 4.4.1.</p>
</blockquote>
<p>Variadic Templates gibts ab gcc 4.3<br />
Die Variadic Macros gibts zu 99.9% auch schon (gcc unterstützt sie im C Modus ja auch).</p>
<p>Möglicherweise musst du halt &quot;-std=cc+0x&quot; übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117228</guid><dc:creator><![CDATA[Ethon_notloggedin]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:15:02 GMT]]></title><description><![CDATA[<p>RibRob22 schrieb:</p>
<blockquote>
<p>Keine Ahnung was ich hab. Ich benutze gcc version 4.4.1.</p>
</blockquote>
<p>Dann sag doch gleich, dass du nicht weißt, welche Sprachstandards dein Compiler unterstützt.</p>
<p>Und dann gib uns am Besten noch die info, nach der gefragt wurde: Was willst du erreichen? (Siehe auch Link in meiner Signatur)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117230</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:15:02 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:23:40 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>RibRob22 schrieb:</p>
<blockquote>
<p>Keine Ahnung was ich hab. Ich benutze gcc version 4.4.1.</p>
</blockquote>
<p>Dann sag doch gleich, dass du nicht weißt, welche Sprachstandards dein Compiler unterstützt.</p>
<p>Und dann gib uns am Besten noch die info, nach der gefragt wurde: Was willst du erreichen? (Siehe auch Link in meiner Signatur)</p>
</blockquote>
<p>Is doch Wurst wozu ich das brauch. Das ist ne klare Frage und entweder geht es oder nicht.</p>
<p>Nur fuer die Klugscheisser: Ich will einfach eine Logfunktion per Makro aufrufen, damit im Debug Modus die Logfunktion NICHT aufgerufen wird. Und ist jetzt die Frage auf magische Art beantwortbar geworden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117237</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:32:03 GMT]]></title><description><![CDATA[<p>RibRob22 schrieb:</p>
<blockquote>
<p>Is doch Wurst wozu ich das brauch. Das ist ne klare Frage und entweder geht es oder nicht.</p>
<p>Nur fuer die Klugscheisser: Ich will einfach eine Logfunktion per Makro aufrufen, damit im Debug Modus die Logfunktion NICHT aufgerufen wird. Und ist jetzt die Frage auf magische Art beantwortbar geworden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Okay, klare Antwort: was du tun willst geht nicht. Was du erreichen willst ginge ohne große Probleme und ohne Makrokacke, aber ich will ja nicht klugscheißen, also halt ich die Klappe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117246</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:35:40 GMT]]></title><description><![CDATA[<p>Na geht doch. Wieso nicht gleich so!?</p>
<p>Wobei es mich ja schon interessieren wuerde, wie man OHNE Makros Funktionsaufrufe rausfiltern kann im Release Mode. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117248</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:39:10 GMT]]></title><description><![CDATA[<p>RibRob22 schrieb:</p>
<blockquote>
<p>Wobei es mich ja schon interessieren wuerde, wie man OHNE Makros Funktionsaufrufe rausfiltern kann im Release Mode. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Nö, eben hast du noch behauptet, dass dich nur die Antwort auf deine Frage interessiert. Dich jetzt plötzlich doch für andere Lösungswege zu interessieren, nachdem du pampig geworden bist, kommt bissle spät.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117251</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:42:50 GMT]]></title><description><![CDATA[<p>Wir wissen beide, dass es nur mit Makros geht.</p>
<p>Echt traurig, wie oft es in diesem Forum nach diesem Muster laeuft:<br />
OP: Simple Frage<br />
Forenklugscheisser: Was willst du ueberhaupt machen?<br />
OP: Sagt es, obwohl es irrelevant ist<br />
Forenklugscheisser: Mieses Design!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117252</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:42:50 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:49:47 GMT]]></title><description><![CDATA[<p>RibRob22 schrieb:</p>
<blockquote>
<p>Wir wissen beide, dass es nur mit Makros geht.</p>
</blockquote>
<pre><code class="language-cpp">typedef void (*logging_function_t)(char const *, ...);

logging_function_t LOG_INFO = DEBUG ? Log_noop : Log;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2117253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117253</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 12:57:05 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>RibRob22 schrieb:</p>
<blockquote>
<p>Wir wissen beide, dass es nur mit Makros geht.</p>
</blockquote>
<pre><code class="language-cpp">typedef void (*logging_function_t)(char const *, ...);

logging_function_t LOG_INFO = DEBUG ? Log_noop : Log;
</code></pre>
</blockquote>
<p>LOL. Ja genau, wir frickeln uns jetzt voellig weltfremde Konstrukte, die dennoch NICHT das selbe machen wie Makros. Denn hier wird nach wie vor eine Dummyfunktion aufgerufen. Ich sagte aber, dass jegliche Log Funktionsaufrufe ausgefiltert werden sollen. Abgesehen davon, dass man per HAND je nach Mode DEBUG anders initialisieren muesste. Fail. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2117256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117256</guid><dc:creator><![CDATA[RibRob22]]></dc:creator><pubDate>Fri, 09 Sep 2011 12:57:05 GMT</pubDate></item><item><title><![CDATA[Reply to Makro mit varargs on Fri, 09 Sep 2011 13:14:03 GMT]]></title><description><![CDATA[<p>Bevor du dich noch tiefer in die Scheiße reitest, mache ich mal zu deinem eigenem Nutzen zu. Vielleicht hast du dann die Chance, dass du in Zukunft doch noch einmal ernst genommen wirst, wenn Gras über diese Sache gewachsen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117265</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 Sep 2011 13:14:03 GMT</pubDate></item></channel></rss>