<?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[Bad Practise]]></title><description><![CDATA[<p>Hey Leute ich hatte letztens ein Open Source Programm veröffentlicht allerdings wurde es oft mit Bad Practise in diesen Zeilen kommentiert.<br />
Kann mir jemand helfen.</p>
<pre><code>time_t t = time(0);
    struct tm * now = localtime(&amp; t);
    std::ofstream log(&quot;server.log&quot;, std::ios::app);
    log &lt;&lt; now-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_sec &lt;&lt; &quot; [INFO] &quot; + message &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; now-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_sec &lt;&lt; &quot; [INFO] &quot; + message &lt;&lt; &quot;\n&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/330552/bad-practise</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 02:32:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330552.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Jan 2015 19:48:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bad Practise on Thu, 15 Jan 2015 19:48:18 GMT]]></title><description><![CDATA[<p>Hey Leute ich hatte letztens ein Open Source Programm veröffentlicht allerdings wurde es oft mit Bad Practise in diesen Zeilen kommentiert.<br />
Kann mir jemand helfen.</p>
<pre><code>time_t t = time(0);
    struct tm * now = localtime(&amp; t);
    std::ofstream log(&quot;server.log&quot;, std::ios::app);
    log &lt;&lt; now-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_sec &lt;&lt; &quot; [INFO] &quot; + message &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; now-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; now-&gt;tm_sec &lt;&lt; &quot; [INFO] &quot; + message &lt;&lt; &quot;\n&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2437772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437772</guid><dc:creator><![CDATA[odu]]></dc:creator><pubDate>Thu, 15 Jan 2015 19:48:18 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Thu, 15 Jan 2015 20:01:13 GMT]]></title><description><![CDATA[<p>wobei? Herausfinden, was mit bad practise gemeint ist? Oder wie verbessert werden sollte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437777</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 15 Jan 2015 20:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Thu, 15 Jan 2015 20:17:48 GMT]]></title><description><![CDATA[<p>Mh, was mir auffällt und was ich vermeiden würde, wäre dieses C-artige Konstrukt mit localtime.</p>
<p>Aber mir fällt da auch keine Alternative ein grad oO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437779</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 15 Jan 2015 20:17:48 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Thu, 15 Jan 2015 20:27:23 GMT]]></title><description><![CDATA[<p>Ich verstehe die Frage nicht. Das Programm wurde <em>oft</em> negativ kommentiert, aber die Kommentatoren haben sich alle verschworen und wollen dir nicht sagen, was genau nicht OK ist? Auch auf Nachfrage nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437782</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 15 Jan 2015 20:27:23 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Thu, 15 Jan 2015 20:31:25 GMT]]></title><description><![CDATA[<p>Ich würde gerne wissen was ich verbessern könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437783</guid><dc:creator><![CDATA[odu]]></dc:creator><pubDate>Thu, 15 Jan 2015 20:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Thu, 15 Jan 2015 20:36:56 GMT]]></title><description><![CDATA[<p>Das + in den beiden Ausgaben durch &lt;&lt; ersetzen wäre ein eindeutiger Kandidat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437784</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 15 Jan 2015 20:36:56 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Thu, 15 Jan 2015 21:09:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Write(struct tm* _tm, std::ofstream&amp; os){
 os &lt;&lt; _tm-&gt;tm_hour &lt;&lt; .... &lt;&lt; &quot;\n&quot;; }
Write(now, log);
Write(now, std::cout);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2437786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437786</guid><dc:creator><![CDATA[großbuchstaben]]></dc:creator><pubDate>Thu, 15 Jan 2015 21:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 06:51:59 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Mh, was mir auffällt und was ich vermeiden würde, wäre dieses C-artige Konstrukt mit localtime.</p>
<p>Aber mir fällt da auch keine Alternative ein grad oO</p>
</blockquote>
<p>Boost hat wohl auch eine datetime Library aber ich habe selbst damit noch nichts gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437829</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Fri, 16 Jan 2015 06:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 07:17:59 GMT]]></title><description><![CDATA[<p>Formatstrings waeren mal was, siehe <a href="https://www.c-plusplus.net/forum/p2437357#2437357">https://www.c-plusplus.net/forum/p2437357#2437357</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437838</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Fri, 16 Jan 2015 07:17:59 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 07:20:43 GMT]]></title><description><![CDATA[<pre><code>struct tm * now = localtime(&amp; t);
</code></pre>
<p>Dieser Code ist nicht unbedingt threadsafe, da localtime in gängigen Implementierungen einen Zeiger auf ein interne statisches struct zurückgibt, dass sich mit jedem Aufruf ändert. Der Standard liefert aber leider keine Alternative.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437840</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Fri, 16 Jan 2015 07:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 07:44:11 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<pre><code>struct tm * now = localtime(&amp; t);
</code></pre>
<p>Dieser Code ist nicht unbedingt threadsafe, da localtime in gängigen Implementierungen einen Zeiger auf ein interne statisches struct zurückgibt, dass sich mit jedem Aufruf ändert. Der Standard liefert aber leider keine Alternative.</p>
</blockquote>
<p>Man kann's halt direkt kopieren, was zumindest Folgeaufrufe ermöglicht. Oder, da es wohl um die aktuelle Uhrzeit geht, die bekommt man auch mit der system_clock aus chrono.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437846</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 16 Jan 2015 07:44:11 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 08:14:43 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Man kann's halt direkt kopieren, was zumindest Folgeaufrufe ermöglicht.</p>
</blockquote>
<p>Da der Kopiervorgang nicht atomar ist, müsstest du sicherstellen, das während du die Kopie macht niemand anderes localtime aufruft. Das ist in größeren Projekten quasi unmöglich.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Oder, da es wohl um die aktuelle Uhrzeit geht, die bekommt man auch mit der system_clock aus chrono.</p>
</blockquote>
<p>Wenn du die so ausgeben wolltest müsstest du den time_point erst in eine time_t und davon in ein tm* umwandeln. Damit hast du die selben Probleme und schöner wird der Code dadurch auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437850</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Fri, 16 Jan 2015 08:14:43 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 10:12:00 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<pre><code>struct tm * now = localtime(&amp; t);
</code></pre>
<p>Dieser Code ist nicht unbedingt threadsafe, da localtime in gängigen Implementierungen einen Zeiger auf ein interne statisches struct zurückgibt, dass sich mit jedem Aufruf ändert. Der Standard liefert aber leider keine Alternative.</p>
</blockquote>
<p>Plattformen, die threads unterstützen legen diese Werte typischer Weise in thread local storage ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437858</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Fri, 16 Jan 2015 10:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 10:16:22 GMT]]></title><description><![CDATA[<p>odu schrieb:</p>
<blockquote>
<p>Hey Leute ich hatte letztens ein Open Source Programm veröffentlicht allerdings wurde es oft mit Bad Practise in diesen Zeilen kommentiert.<br />
Kann mir jemand helfen.</p>
</blockquote>
<p>Du öffnest mit jeder Zeile die Datei? Das ist Gift für die Performance.</p>
<p>Warum schreibst Du nicht einfach auf std::clog und überlässt es dem Aufrufer, den output entsprechend dahin zu biegen, wo er ihn haben möchte?</p>
<p>mfg Torsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437859</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Fri, 16 Jan 2015 10:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 19:29:26 GMT]]></title><description><![CDATA[<p>großbuchstaben schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Write(struct tm* _tm, std::ostream&amp; os){
 os &lt;&lt; _tm-&gt;tm_hour &lt;&lt; .... &lt;&lt; &quot;\n&quot;; }
</code></pre>
</blockquote>
<p>Die Funktion nehme ich und dann schreibe ich dazu noch:</p>
<pre><code>std::ostream&amp; now( std::ostream&amp; o )
{
  ...
  Write( localtime(&amp;t), o );
  return o;
}
</code></pre>
<p>und dann wird's hübscher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /> :</p>
<pre><code>std::clog &lt;&lt; now &lt;&lt; message &lt;&lt; std::endl;
</code></pre>
<p>Edit: stream / ofstream =&gt; ostream</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437861</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Fri, 16 Jan 2015 19:29:26 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 14:40:55 GMT]]></title><description><![CDATA[<p>Torsten Robitzki schrieb:</p>
<blockquote>
<p>großbuchstaben schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Write(struct tm* _tm, std::ofstream&amp; os){
 os &lt;&lt; _tm-&gt;tm_hour &lt;&lt; .... &lt;&lt; &quot;\n&quot;; }
</code></pre>
</blockquote>
<p>Die Funktion nehme ich und dann schreibe ich dazu noch:</p>
<pre><code>std::ostream&amp; now( std::stream&amp; o )
{
  ...
  Write( localtime(&amp;t), o );
  return o;
}
</code></pre>
<p>und dann wird's hübscher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /> :</p>
<pre><code>std::clog &lt;&lt; now &lt;&lt; message &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Diesen Code versteh ich jetzt nicht.</p>
<p>Wie wird der Text ausgegeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437897</guid><dc:creator><![CDATA[odu]]></dc:creator><pubDate>Fri, 16 Jan 2015 14:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 14:53:43 GMT]]></title><description><![CDATA[<p>odu schrieb:</p>
<blockquote>
<p>Diesen Code versteh ich jetzt nicht.</p>
<p>Wie wird der Text ausgegeben?</p>
</blockquote>
<pre><code>std::clog &lt;&lt; message &lt;&lt; std::endl;
</code></pre>
<p>Den Teil verstehst Du doch soweit oder? Die Write() Funktion von Großbuchstaben verstehst Du auch, oder?</p>
<p>std::ostream (der Typ, den std::clog hat), hat eine Funktion (operator&lt;&lt;), die als Parameter eine Funktion nimmt, die einen ostream&amp; nimmt. Die sieht in etwa so aus:</p>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream (*f)(std::ostream&amp;))
{
   return f( *this );
}
</code></pre>
<p>*this ist im obigen Beispiel std::clog und f ist die Funktion now(). Der obige operator&lt;&lt; ruft also now() mit *this auf. Und now() ruft Write() auf. Das ist übrigens der gleiche Mechanismus, mit dem std::endl einen &quot;\n&quot; in den stream bekommt und anschließend flush() aufruft.</p>
<p>mfg Torsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437899</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Fri, 16 Jan 2015 14:53:43 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 18:34:49 GMT]]></title><description><![CDATA[<p>doch der std::stream&amp; o wurde nirgendswo defeniert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437923</guid><dc:creator><![CDATA[Ôdu]]></dc:creator><pubDate>Fri, 16 Jan 2015 18:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 23:26:48 GMT]]></title><description><![CDATA[<p>Kann mir wer klären, was die Zeile</p>
<pre><code>struct tm * now = localtime(&amp; t);
</code></pre>
<p>bedeutet?<br />
Das tm * now bringt mich ins grübeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437964</guid><dc:creator><![CDATA[Namenloser324]]></dc:creator><pubDate>Fri, 16 Jan 2015 23:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Practise on Fri, 16 Jan 2015 23:58:34 GMT]]></title><description><![CDATA[<p><code>struct tm</code> ist der Name des Typs in der C-Schreibweise, wo man mit angeben muss, dass es ein struct ist. In C++ könnte man auch bloß <code>tm</code> schreiben, aber die C-Schreibweise geht eben auch. Nehmen wir mal zur Vereinfachung an, da stünde einfach nur int als Typ:</p>
<pre><code>int * now = irgendwas;
</code></pre>
<p>Nun klar? Falls nicht: Leerzeichen sind egal. Das ist das gleiche wie</p>
<pre><code>int *now = irgendwas;
</code></pre>
<p>oder</p>
<pre><code>int* now = irgendwas;
</code></pre>
<p>oder</p>
<pre><code>int       *      now = irgendwas;
</code></pre>
<p>Also bloß ein Zeiger namens <code>now</code> auf einen Typen namens <code>struct tm</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437967</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 16 Jan 2015 23:58:34 GMT</pubDate></item></channel></rss>