<?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[__func__ in logger nutzen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ne bissl komische Frage und hoffe, dass ihr mich versteht. <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="🙂"
    /> Ich habe mir einen kleinen Logger gebastelt, nach dem Vorbild von log4cpp. Funktioniert auch alles fein, gar keine Probleme. Nun habe ich gelesen, dass es ja die Macros __LINE__ und __func__ bzw. BOOST_CURRENT_FUNCTION gibt. Mein logger funktioniert aktuell so vom Aufruf:</p>
<pre><code>log &lt;&lt; DEBUG &lt;&lt; &quot;message to log&quot;;
</code></pre>
<p>Dabei ist DEBUG ein enum, welches vom Logger als LogLevel verwendet wird und im Output in den entsprechenden String umgewandelt wird. Nun meine Frage, kann man irgendwie in diese Kette die Makros versteckt einbauen, ohne dass der Nutzer explizit jedesmal __LINE__ schreiben muß? Ich habe keine Idee, wie man das Präpozessor-Ergebnis an die Funktion übergeben könnte. Vermutlich ist es wieder ganz einfach. Die einzige Idee, welche mir vorschwebt wäre den Output-operator irgendwie zu überladen/erweitern, dass er per default __LINE__ und __func__ mitbekommt. Aber geht das?</p>
<p>Schon mal dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327264/__func__-in-logger-nutzen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 10:45:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327264.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Aug 2014 07:53:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 07:53:49 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ne bissl komische Frage und hoffe, dass ihr mich versteht. <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="🙂"
    /> Ich habe mir einen kleinen Logger gebastelt, nach dem Vorbild von log4cpp. Funktioniert auch alles fein, gar keine Probleme. Nun habe ich gelesen, dass es ja die Macros __LINE__ und __func__ bzw. BOOST_CURRENT_FUNCTION gibt. Mein logger funktioniert aktuell so vom Aufruf:</p>
<pre><code>log &lt;&lt; DEBUG &lt;&lt; &quot;message to log&quot;;
</code></pre>
<p>Dabei ist DEBUG ein enum, welches vom Logger als LogLevel verwendet wird und im Output in den entsprechenden String umgewandelt wird. Nun meine Frage, kann man irgendwie in diese Kette die Makros versteckt einbauen, ohne dass der Nutzer explizit jedesmal __LINE__ schreiben muß? Ich habe keine Idee, wie man das Präpozessor-Ergebnis an die Funktion übergeben könnte. Vermutlich ist es wieder ganz einfach. Die einzige Idee, welche mir vorschwebt wäre den Output-operator irgendwie zu überladen/erweitern, dass er per default __LINE__ und __func__ mitbekommt. Aber geht das?</p>
<p>Schon mal dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411424</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Fri, 01 Aug 2014 07:53:49 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 08:03:34 GMT]]></title><description><![CDATA[<pre><code>#define LOG(logger) logger &lt;&lt; __func__ &lt;&lt; &quot;Hi&quot; &lt;&lt; ...
</code></pre>
<p>Man muss Makros verwenden, da __func__ und Co sich sonst auf die aufgerufene Funktion beziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411427</guid><dc:creator><![CDATA[log]]></dc:creator><pubDate>Fri, 01 Aug 2014 08:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 08:06:20 GMT]]></title><description><![CDATA[<p><code>__func__</code> ist <strong>kein</strong> Makro. Sondern eine sog. <em>function-local predefined variable</em>.</p>
<blockquote>
<p>The function-local predefined variable <code>__func__</code> is defined as if a definition of the form</p>
<pre><code>static const char __func__[] = &quot;function-name &quot;;
</code></pre>
</blockquote>
<p><code>__func__</code> wird also nie durch etwas ersetzt sondern ist einfach der Name einer Variable.</p>
<p>Und solange du __LINE__ auch entsprechend verwendest (ohne dass es vorzeitig ersetzt wird) kannst du folgendes schreiben:</p>
<pre><code>#define INFO (std::to_string(__LINE__) + ' ' + __func__)
// [..]
std::cout &lt;&lt; INFO;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2411428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411428</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 01 Aug 2014 08:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 08:51:17 GMT]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ja, solche makros hatte ich früher. da ich hier nen simulator verwende, welcher an verschiedene dienste logged, war dies immer sehr unschön (in jeder klasse musste man das macro neudefinieren, damit die ausgaben stimmen ...). daher kam der wunsch, es los zu werden. falls ihr versteht. ich habe überlegt, ob es möglich ist, den operator&lt;&lt; so zu überladen, dass automatisch immer __LINE__ als parameter verwendet wird. aus:</p>
<p>operator&lt;&lt;(ostream &amp; s, LoggerLevel level);</p>
<p>irgendwas wie:</p>
<p>operator&lt;&lt;(ostream &amp;s, LoggerLevel level, string line=__LINE__);</p>
<p>ohne dass es mit dem nachfolgenden strings kollidiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411438</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Fri, 01 Aug 2014 08:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 09:01:46 GMT]]></title><description><![CDATA[<p>sven_ schrieb:</p>
<blockquote>
<p>ich habe überlegt, ob es möglich ist, den operator&lt;&lt; so zu überladen, dass automatisch immer __LINE__ als parameter verwendet wird. aus:</p>
<p>operator&lt;&lt;(ostream &amp; s, LoggerLevel level);</p>
<p>irgendwas wie:</p>
<p>operator&lt;&lt;(ostream &amp;s, LoggerLevel level, string line=__LINE__);<br />
ohne dass es mit dem nachfolgenden strings kollidiert.</p>
</blockquote>
<p>Vielleicht sowas</p>
<pre><code>#define log2 log&lt;&lt;debug&lt;&lt;' '&lt;&lt;__func__&lt;&lt;' '&lt;&lt;line&lt;&lt;':'
…
log2&lt;&lt;&quot;something happened&quot;;
</code></pre>
<p>aber es wird bei Makros bleiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411441</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 01 Aug 2014 09:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 15:59:16 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Wenn überhaupt dann in Klammern. Man könnte auch eine Funktion</p>
<pre><code>std::ostream&amp; printInfo(std::ostream&amp; os, unsigned line, char const* func)
{
    return os &lt;&lt; '\n' &lt;&lt; line &lt;&lt; ' ' &lt;&lt; func &lt;&lt; &quot;: &quot;;
}

#define INFO_LOG (printInfo(log, __LINE__, __func__))

INFO_LOG &lt;&lt; &quot;Hi!&quot;;
</code></pre>
<p>schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411518</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 01 Aug 2014 15:59:16 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 16:04:55 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Man könnte auch eine Funktion schreiben.</p>
</blockquote>
<p>Mehrwert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411519</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 01 Aug 2014 16:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Fri, 01 Aug 2014 16:08:40 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Man könnte auch eine Funktion schreiben.</p>
</blockquote>
<p>Mehrwert?</p>
</blockquote>
<p>Mehr Klammern.</p>
<p>@Arcoth: Ich hätte</p>
<pre><code class="language-cpp">#define INFO_LOG ((((printInfo(((log)), ((__LINE__)), ((__func__)))))))
</code></pre>
<p>geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411520</guid><dc:creator><![CDATA[Zweiklammeransatz]]></dc:creator><pubDate>Fri, 01 Aug 2014 16:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Thu, 07 Aug 2014 15:55:51 GMT]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>nun schade, dass es nur über macros geht. aber da bleibe ich lieber bei meiner lösung. <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>vielen dank für die tips. trotzdem viel gelernt. <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/2412423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412423</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Thu, 07 Aug 2014 15:55:51 GMT</pubDate></item><item><title><![CDATA[Reply to __func__ in logger nutzen on Thu, 07 Aug 2014 16:00:52 GMT]]></title><description><![CDATA[<p>sven_ schrieb:</p>
<blockquote>
<p>nun schade, dass es nur über macros geht. aber da bleibe ich lieber bei meiner lösung. <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>
</blockquote>
<p>Warum?<br />
Makros sind nicht per sé böse, dass hier ist einer der wenigen berechtigten Anwendungsfälle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412425</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 07 Aug 2014 16:00:52 GMT</pubDate></item></channel></rss>