<?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[HeaderDatei - doppelte Includes ?]]></title><description><![CDATA[<p>fkt.h</p>
<pre><code>#include &lt;stdio.h&gt;

void test (void);
</code></pre>
<p>fkt.cpp</p>
<pre><code>#include &quot;fkt.h&quot;

void test (void)
{
printf(&quot;test&quot;);
}
</code></pre>
<p>main.cpp</p>
<pre><code>#include &lt;stdio.h&gt;
#include &quot;fkt.h&quot;

int main (void)
{
test();
printf(&quot;test&quot;);
}
</code></pre>
<p>Also man sieht hier ein einfaches Bespiel zu einer Headerdatei, die Frage ist kann man umgehen das zweimal &lt;stdio.h&gt; eingebunden wird?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324381/headerdatei-doppelte-includes</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 20:26:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324381.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Mar 2014 16:22:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 16:22:40 GMT]]></title><description><![CDATA[<p>fkt.h</p>
<pre><code>#include &lt;stdio.h&gt;

void test (void);
</code></pre>
<p>fkt.cpp</p>
<pre><code>#include &quot;fkt.h&quot;

void test (void)
{
printf(&quot;test&quot;);
}
</code></pre>
<p>main.cpp</p>
<pre><code>#include &lt;stdio.h&gt;
#include &quot;fkt.h&quot;

int main (void)
{
test();
printf(&quot;test&quot;);
}
</code></pre>
<p>Also man sieht hier ein einfaches Bespiel zu einer Headerdatei, die Frage ist kann man umgehen das zweimal &lt;stdio.h&gt; eingebunden wird?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388944</guid><dc:creator><![CDATA[Tron123]]></dc:creator><pubDate>Fri, 14 Mar 2014 16:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 16:25:31 GMT]]></title><description><![CDATA[<p>Jup, ist schon.<br />
Stichwort: include guards</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388947</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 14 Mar 2014 16:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 16:54:24 GMT]]></title><description><![CDATA[<p>Ja die sind mir bekannt.</p>
<p>#pragma once</p>
<p>o.</p>
<p>#ifndef TEST_H<br />
#define TEST_H</p>
<p>#endif</p>
<p>Nur würde es trotzdem doppelt &lt;stdio.h&gt; einbinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388951</guid><dc:creator><![CDATA[Tron123]]></dc:creator><pubDate>Fri, 14 Mar 2014 16:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 17:14:31 GMT]]></title><description><![CDATA[<p>Der Compiler braucht in jeder Übersetzungseinheit einmal den Header, wenn Funktionen daraus verwendet werden. Natürlich sollte der Compiler soweit optimiert sein, dass er die Datei nur einmal im Speicher hält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388953</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Fri, 14 Mar 2014 17:14:31 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 17:14:30 GMT]]></title><description><![CDATA[<p>Tron123 schrieb:</p>
<blockquote>
<p>Nur würde es trotzdem doppelt &lt;stdio.h&gt; einbinden.</p>
</blockquote>
<p>Wobei das zweite mal dank include guards nichts tut!<br />
Manche Compiler sind sogar soweit in der Lage das zu erkennen und die Datei noch nicht einmal zu öffnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388956</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 14 Mar 2014 17:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 17:17:56 GMT]]></title><description><![CDATA[<p>Kommt darauf an wie man es sieht. Im Endeffekt wird die Datei dreimal eingebunden, einmal in der Übersetzungseinheit von fkt.cpp, in der Übersetzungseinheit von main (1. include) und noch einmal in der Übersetzungseinheit von main über fkt.h. Das zweite in main wird von den Include-Guards verhindert, d.h. es bleiben noch zwei, eine pro Übersetzungseinheit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388958</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Fri, 14 Mar 2014 17:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 17:47:11 GMT]]></title><description><![CDATA[<p>patrick246 schrieb:</p>
<blockquote>
<p>Das zweite in main wird von den Include-Guards verhindert, d.h. es bleiben noch zwei, eine pro Übersetzungseinheit.</p>
</blockquote>
<p>Und das kann und soll man auch nicht verhindern, da jede Übersetzungseinheit die Deklaration aus <strong>cstdio</strong> braucht, da sie sonst nicht kompilieren würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388965</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 14 Mar 2014 17:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 18:00:45 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Manche Compiler sind sogar soweit in der Lage das zu erkennen und die Datei noch nicht einmal zu öffnen.</p>
</blockquote>
<p>Jo, wobei der Effekt von diesem Trick eher vor 20 Jahren wichtig war, bei Speichermangel in Win95 auf Drehplatten. MS hatte dazu #pragma once erfunden, gcc erkannte die normalen include-guards.</p>
<p>Jetzt können alle #pragma once, aber keiner braucht's. <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="😃"
    /><br />
<a href="http://en.wikipedia.org/wiki/Pragma_once#Portability" rel="nofollow">http://en.wikipedia.org/wiki/Pragma_once#Portability</a></p>
<pre><code># time ( find / -iname '*.h' | wc -l )
258190
real	0m3.396s
user	0m1.745s
sys	0m1.621s

# time ( find / -iname '*.h' -print0 | xargs -0 head -n2 &gt; t )
real	0m5.314s
user	0m2.898s
sys	0m3.271s
</code></pre>
<p>Aha, Datei-Öffnen und die ersten beiden Zeilen lesen packt er so um die 100000 pro Sekunde.</p>
<p>edit: Ups, das war gemessen unter voller Prozessorauslastung von anderen Prozessen. Im Idle sieht's sp aus:</p>
<pre><code># time ( find / -iname '*.h' | wc -l )
258190
real	0m3.042s
user	0m1.616s
sys	0m1.470s

# time ( find / -iname '*.h' -print0 | xargs -0 head -n2 &gt; t )
real	0m3.143s
user	0m2.082s
sys	0m2.142s
</code></pre>
<p>also vielleicht eher 1Mio unoptimierte include-guards pro Sekunde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388967</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 14 Mar 2014 18:00:45 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 21:33:07 GMT]]></title><description><![CDATA[<p>Tron123 schrieb:</p>
<blockquote>
<p>fkt.h</p>
<pre><code>#include &lt;stdio.h&gt;
void test (void);
</code></pre>
<p>Also man sieht hier ein einfaches Bespiel zu einer Headerdatei, die Frage ist kann man umgehen das zweimal &lt;stdio.h&gt; eingebunden wird?</p>
</blockquote>
<p>wozu mußt Du überhaupt in fkt.h &lt;stdio.h&gt; inkludieren ? Wenn die Implementation einer Funktion in fkt.cpp diese include braucht, reicht es doch, #include &lt;stdio.h&gt; in die .cpp-Datei zu schreiben. Und zweitens, ich inkludiere immer nur dann, wenn es wirklich gebraucht wird, d.h. nur dann, wenn es ohne das include nicht zu linken ist. Damit fiele #include&lt;stdio.h&gt; in main.cpp weg und das Problem stellt sich *hier* nicht. In anderen Situationen könnte es aufw{e|ä}ndig sein, mehrfache includes zu umgehen, dann lösen include guards in jeder .h Datei das Problem einfach und wirkungsvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388991</guid><dc:creator><![CDATA[großbuchstaben]]></dc:creator><pubDate>Fri, 14 Mar 2014 21:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Fri, 14 Mar 2014 22:07:24 GMT]]></title><description><![CDATA[<p>großbuchstaben schrieb:</p>
<blockquote>
<p>Und zweitens, ich inkludiere immer nur dann, wenn es wirklich gebraucht wird, d.h. nur dann, wenn es ohne das include nicht zu linken ist. Damit fiele #include&lt;stdio.h&gt; in main.cpp weg und das Problem stellt sich *hier* nicht.</p>
</blockquote>
<p>Die main verwendet unmittelbar printf() und deshalb soll sie die &lt;stdio.h&gt; inkludieren. Sonst machste ja die Dateien nicht mehr davon abhängin, was sie tun, sondern davon was andere Datein tun, das wird möglicherweise so ein schlimmer HeckMeck, daß man die Lust verliert und anfängt, großzügig zu inkludieren. Die &quot;fkt.h&quot; sollte die &lt;stdio.h&gt; hingegen nicht inkludieren, aber dafür sollte die &quot;fkt.cpp&quot; es wieder machen, denn sie verwendet auch printf().</p>
<p>Und es reicht, auf den Compiler zu achten, was man mindestens inkludieren muss: Haste den erstmal überzeugt, ist im Allgemeinen auch der Linker mit dem Inkludieren zufrieden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388992</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 14 Mar 2014 22:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to HeaderDatei - doppelte Includes ? on Sat, 15 Mar 2014 18:28:04 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Sonst machste ja die Dateien nicht mehr davon abhängin, was sie tun, sondern davon was andere Datein tun, das wird möglicherweise so ein schlimmer HeckMeck, daß man die Lust verliert und anfängt, großzügig zu inkludieren.</p>
</blockquote>
<p>das hängt von der Konsequenz ab, würde ich sagen. Benötigt eine Datei A.h nach Bearbeitung mehr #includes als voher, sagt mir der Compiler das schon. Dann prüfe ich, ob diejenigen DAteien, die A.h inkludieren, nun überflüssige #includes besitzen und passe sie ggf an.</p>
<p>Ab einem bestimmten Reifungsgrad ändert sich der #include-Graph meinen Erfahrungen nach sowieso seltener oder nur noch bei Refactorings und größeren Erweiterungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389096</guid><dc:creator><![CDATA[großbuchstaben]]></dc:creator><pubDate>Sat, 15 Mar 2014 18:28:04 GMT</pubDate></item></channel></rss>