<?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[c++ Dateilogger]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nachdem ich nun schon ein ganze weile gegoogled habe, suche ich eine Variante mit der man folgendes C Makro in C++ abbilden kann.</p>
<pre><code>#define DBG(fmt, args...) { \
	fprintf(fd_log, &quot;%ld: &quot;fmt, time(NULL), ##args ); \
	fflush(fd_log); \
}
</code></pre>
<p>Vieleicht hat ja einer nen guten Vorschlag dazu. Das einzige was ich gefunden habe sind stringstream´s, wobei ich mir nicht sicher bin wie man das macht (ableiten ?!).</p>
<p>Gruß, Kekso</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160490/c-dateilogger</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 06:59:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160490.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Sep 2006 11:36:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 11:36:01 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nachdem ich nun schon ein ganze weile gegoogled habe, suche ich eine Variante mit der man folgendes C Makro in C++ abbilden kann.</p>
<pre><code>#define DBG(fmt, args...) { \
	fprintf(fd_log, &quot;%ld: &quot;fmt, time(NULL), ##args ); \
	fflush(fd_log); \
}
</code></pre>
<p>Vieleicht hat ja einer nen guten Vorschlag dazu. Das einzige was ich gefunden habe sind stringstream´s, wobei ich mir nicht sicher bin wie man das macht (ableiten ?!).</p>
<p>Gruß, Kekso</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144645</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 11:36:01 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 11:38:44 GMT]]></title><description><![CDATA[<p>Beinahe. Nimm Streams, also fstream. Dazu solltest Du was finden bei google oder hier im Forum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144648</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Tue, 26 Sep 2006 11:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 11:49:09 GMT]]></title><description><![CDATA[<p>Kann ich den fstreams eine variable Parameterliste übergeben? Der Aufruf sollte dem &quot;DBG(fmt, args...)&quot; schon ähneln, ich will mir ja damit das logging vereinfachen und kapseln. Eine Ellipse wolle ich da möglichst aber nicht verwenden, da diese recht fehleranfällig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144658</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 11:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 11:51:39 GMT]]></title><description><![CDATA[<p>Variable Paramterlisten gibts AFAIK in C++ nicht.<br />
Du könntest aber überladene Versionen der Funktion implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144662</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Tue, 26 Sep 2006 11:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 11:58:47 GMT]]></title><description><![CDATA[<p>Du kannst den Streams per Operator-Kette mehrere Werte übergeben (in der Form &quot;out&lt;&lt;data1&lt;&lt;data2&lt;&lt;...&quot;). Eventuell könntest du dich auch mal unter Boost::Format umsehen, wenn du printf()-ähnliche Formatierungen mit Streams kombinieren willst.</p>
<p>edit @1310: Klar gibt es in C++ noch variable Parameterlisten - schon aus Gründen der Kompatibilität.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144671</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 26 Sep 2006 11:58:47 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:01:45 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>edit @1310: Klar gibt es in C++ noch variable Parameterlisten - schon aus Gründen der Kompatibilität.</p>
</blockquote>
<p>Hm ok. Aber die sollte man doch nicht mehr verwenden, da veraltet oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144680</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:08:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define DBG(expr) \
  do { if (debug_enabled) logfile &lt;&lt; expr; } while (false)
</code></pre>
<p>wobei &quot;logfile&quot; als &quot;std::ofstream&quot; und &quot;log_enabled&quot; als &quot;bool&quot; definiert ist. Dann kannst Du so etwas schreiben:</p>
<pre><code class="language-cpp">int a = 5;
DBG(&quot;Der Wert für Variable a ist &quot; &lt;&lt; 5);
</code></pre>
<p>Ich habe mir eine Meta-logging-Library um soetwas gestrickt. Wenn Du Interesse hast, sag Bescheid.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144688</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:11:59 GMT]]></title><description><![CDATA[<p>Ok, das mit der Verkettung durch den &lt;&lt; Operator habe ich begriffen. Meine eigentliche Frage bezieht sich dann auf die Ausgabe der Daten, soll heissen ich will immer automatisch den Zeitstempel voranstehend haben ohne das ich das explizit angeben muss. Alles weitere kann variabel sein und sollte nach Aufruf der Funktion auf einer Zeile stehen. Da ich nu eher aus der C Welt komme bin ich mir nicht sicher wie ich das in C++ implementieren muss. Muss ich den &lt;&lt; Operator dazu mit Hilfe einer eigenen Debugklasse überladen, wenn ja wie? Sind trotzdem explizite Zeilenumbrüche mit endl möglich?</p>
<p>Vielen Dank schon mal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144693</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:17:03 GMT]]></title><description><![CDATA[<p>ups.. da war ich wohl zu langsam ;-).<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9578">@tntnet</a>:<br />
ich denke dein Beispiel reicht, wenn ich da auch mehrere Werte verknüpfen kann, Danke. Um dein Beispiel zu Verwenden:</p>
<pre><code>DBG(&quot;Der Wert für Variable a ist &quot; &lt;&lt; 5 &lt;&lt; &quot; B ist &quot; &lt;&lt; 6);
</code></pre>
<p>würde das damit gehn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144699</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:37:26 GMT]]></title><description><![CDATA[<p>Ok, vielen Dank an Alle, das Beispiel von tntnet war im Prinzip genau das was ich gesucht habe. Hier nochmal ein komplettes Beispiel als Pendant zur C Implementierung:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;time.h&gt;

bool debug_enabled = true;
std::ofstream logfile;

#define DBG(expr) \
  do { if (debug_enabled) logfile &lt;&lt; time(NULL) &lt;&lt; &quot;: &quot; &lt;&lt; expr &lt;&lt; std::endl; } while (false) 	

int main()
{
	logfile.open(&quot;ausgabe.txt&quot;);
	if(!logfile) {
		std::cout &lt;&lt; &quot;open logfile failed&quot; &lt;&lt; std::endl;
		return -1;
	}

	DBG(&quot;Der Wert für Variable a ist &quot; &lt;&lt; 5 &lt;&lt; &quot; B ist &quot; &lt;&lt; 6);

	logfile.close();

	return 0;
}
</code></pre>
<p>Gruß, Kekso</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144706</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:45:00 GMT]]></title><description><![CDATA[<p>Darf ich fragen, wozu die Schleife mit der Bedingung while(false) nötig ist? Sie wird ja eh nur einmal ausgeführt, dann kann man sie ja auch weglassen, oder?</p>
<p>Man lernt ja nie aus <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/1144713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144713</guid><dc:creator><![CDATA[Herr-Vorragend]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:53:27 GMT]]></title><description><![CDATA[<p>Ja, das wird benötigt, damit du die Anweisung auch in geschachtelten if()- und Schleifen-Strukturen einsetzen kannst, ohne deinen Programmfluß durcheinanderzubringen (der Präprozessor ersetzt blind - also würde er das else zu dem if(debug_enables) zuordnen:)</p>
<pre><code class="language-cpp">if(mymap.find(val)!=mymap.end())
  DBG(&quot;Wert gefunden&quot;);
else
  DBG(&quot;nichts gefunden&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1144721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144721</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:54:22 GMT]]></title><description><![CDATA[<p>Was müsste ich den eigentlich tun damit dieses Makro auch über eine Funktion abbildbar ist?</p>
<pre><code class="language-cpp">void debugMsg([Datentyp???] expr){
	if (debug_enabled) 
		logfile &lt;&lt; time(NULL) &lt;&lt; &quot;: &quot; &lt;&lt; expr &lt;&lt; std::endl; 	
}
</code></pre>
<p>Kekso</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144722</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 12:57:15 GMT]]></title><description><![CDATA[<p>Okay danke, wieder was gelernt ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144725</guid><dc:creator><![CDATA[Herr-Vorragend]]></dc:creator><pubDate>Tue, 26 Sep 2006 12:57:15 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 13:12:37 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10261">@kekso</a><br />
Mach ein template draus.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void debugMsg(const T&amp; expr){
    if (debug_enabled)
        logfile &lt;&lt; time(NULL) &lt;&lt; &quot;: &quot; &lt;&lt; expr &lt;&lt; std::endl;    
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1144734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144734</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 26 Sep 2006 13:12:37 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 13:26:26 GMT]]></title><description><![CDATA[<p>ok, aber das funktioniert nur für einen Parameter. Bei einer Liste wie</p>
<pre><code>debugMsg(&quot;Der Wert für Variable a ist &quot; &lt;&lt; 5 &lt;&lt; &quot; B ist &quot; &lt;&lt; 6);
</code></pre>
<p>aber leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144749</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 13:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 13:38:42 GMT]]></title><description><![CDATA[<p>Bei dem Makro so direkt aber auch nicht, es sei denn man verwendet derartige Makroargumente</p>
<pre><code class="language-cpp">DBG(a &lt;&lt; b &lt;&lt; c)
</code></pre>
<p>Du könntest dir pro Anzahl der Parameter eine neue Funktion überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144766</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 26 Sep 2006 13:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Dateilogger on Tue, 26 Sep 2006 14:11:42 GMT]]></title><description><![CDATA[<p><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="🙂"
    /> ok das wäre möglich, aber nicht wirklich praktikabel. Aber trotzdem Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144806</guid><dc:creator><![CDATA[kekso]]></dc:creator><pubDate>Tue, 26 Sep 2006 14:11:42 GMT</pubDate></item></channel></rss>