<?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[Header Aufteilung]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte mich etwas näher mit der Spieleprogrammierung beschäftigen.<br />
Die Grundlagen von C++ sind mir soweit bekannt.</p>
<p>Allerdings habe ich eine Frage zur Aufteilung der Header-Dateien:</p>
<p>Ich plane zur Übung eine Art kleine Grafik-Engine in Form einer statischen Bibliothek zu machen.<br />
Kann ich eine einzige große Header-Datei, in der alle anderen Header-Dateien inkludiert werden, erstellen? So dass ich in allen Quellcode-Dateien sowie in den Projekten, die diese statische Bibliothek benutzen immer nur diese eine Header-Datei einbinden muss?<br />
Für kleinere Projekte mag das sicher gehn, aber wie sieht es später mit hunderten Klassen und hunderten Dateien aus?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331519/header-aufteilung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 14:55:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331519.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Mar 2015 18:29:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Header Aufteilung on Wed, 04 Mar 2015 18:29:49 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte mich etwas näher mit der Spieleprogrammierung beschäftigen.<br />
Die Grundlagen von C++ sind mir soweit bekannt.</p>
<p>Allerdings habe ich eine Frage zur Aufteilung der Header-Dateien:</p>
<p>Ich plane zur Übung eine Art kleine Grafik-Engine in Form einer statischen Bibliothek zu machen.<br />
Kann ich eine einzige große Header-Datei, in der alle anderen Header-Dateien inkludiert werden, erstellen? So dass ich in allen Quellcode-Dateien sowie in den Projekten, die diese statische Bibliothek benutzen immer nur diese eine Header-Datei einbinden muss?<br />
Für kleinere Projekte mag das sicher gehn, aber wie sieht es später mit hunderten Klassen und hunderten Dateien aus?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445276</guid><dc:creator><![CDATA[Raven280438]]></dc:creator><pubDate>Wed, 04 Mar 2015 18:29:49 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Wed, 04 Mar 2015 18:35:35 GMT]]></title><description><![CDATA[<p>Das macht man nicht, weil du immer nur das inkludieren sollst, was wirklich gebraucht wird. Mit Sicherheit braucht nicht jede cpp oder hpp File all deine Header.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445280</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 04 Mar 2015 18:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Wed, 04 Mar 2015 20:54:19 GMT]]></title><description><![CDATA[<p>Klar kannst du das.</p>
<p>@out<br />
&quot;man&quot; macht das nicht?<br />
Klar macht &quot;man&quot; das. Die meisten Libraries die ich kenne haben solche Header Files.<br />
Irre praktisch.<br />
Und wer's schnell haben will muss die ja nicht verwenden - kann ja immer noch alles einzeln inkludieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445317</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 04 Mar 2015 20:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Wed, 04 Mar 2015 22:46:50 GMT]]></title><description><![CDATA[<p>Es besteht ein Unterschied, ob man solch einen Header zur Verwendung nach außen hin anbietet oder ob man so etwas intern benutzt. Erfahrungsgemäß haben Leute, die so etwas intern benutzen wollen, meistens nicht so recht den Durchblick, was in solch eine Headersammlung warum rein gehört und was nicht, und packen einfach <em>alles</em> rein. Was dann ganz schnell schief geht, sobald man gegenseitige Abhängigkeiten hat (und die hat man in jedem Projekt, bei dem man eine nennenswerte Anzahl Headerdateien hat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445327</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 04 Mar 2015 22:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Wed, 04 Mar 2015 23:18:48 GMT]]></title><description><![CDATA[<p>Oha, ja.<br />
Dass &quot;in allen Quellcode-Dateien sowie in den Projekten&quot; natürlich auch die Source-Files der Library selbst mit einschliesst hab' ich ganz sorgfältig übersehen <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>
<p>Das ist in der Tat nicht sehr üblich, und vermutlich auch nicht sehr schlau.<br />
In Kombination mit Precompiled-Headers kann man damit zwar oft die Rebuild-All Dauer halbwegs gut reduzieren, aber dafür macht man während des Entwickelns bei jeder kleinen Änderung effektiv ein Rebuild-All. Was dann meist weniger Spass macht.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Erfahrungsgemäß haben Leute, die so etwas intern benutzen wollen, meistens nicht so recht den Durchblick, was in solch eine Headersammlung warum rein gehört und was nicht, und packen einfach <em>alles</em> rein. Was dann ganz schnell schief geht, sobald man gegenseitige Abhängigkeiten hat (und die hat man in jedem Projekt, bei dem man eine nennenswerte Anzahl Headerdateien hat).</p>
</blockquote>
<p>Versteh ich jetzt nicht ganz warum das zu einem Problem wegen gegenseitiger Abhängigkeiten führen sollte.<br />
Gegenseitige Abhängigkeiten muss man sowieso über Forward-Declarations lösen.<br />
Und dann ist es auch egal wenn man ein grosses &quot;inkludiere mir mal eben alles&quot; File hat, das man in jedem Source-File inkludiert.</p>
<p>Oder übersehe ich jetzt 'was?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445336</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 04 Mar 2015 23:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Wed, 04 Mar 2015 23:37:53 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Versteh ich jetzt nicht ganz warum das zu einem Problem wegen gegenseitiger Abhängigkeiten führen sollte.<br />
Gegenseitige Abhängigkeiten muss man sowieso über Forward-Declarations lösen.<br />
Und dann ist es auch egal wenn man ein grosses &quot;inkludiere mir mal eben alles&quot; File hat, das man in jedem Source-File inkludiert.</p>
<p>Oder übersehe ich jetzt 'was?</p>
</blockquote>
<p>&quot;Gegenseitig&quot; ging etwas zu weit. Überhaupt Abhängigkeiten wäre passender. Typischerweise (so etwas kommt hier im Forum ja durchaus öfters vor) geht das so vor sich:<br />
A.h benötigt B.h. Also steht in A.h auch brav <code>#include &quot;B.h&quot;</code> . In beiden steht natürlich auch <code>#include &quot;superheader.h&quot;</code> . Und im Superheader steht natürlich</p>
<pre><code>#include &quot;A.h&quot;
#include &quot;B.h&quot;
</code></pre>
<p>Und dann wundern sie sich, warum in A.h die Deklarationen aus B.h nicht gefunden werden.</p>
<p>(Falls mein Beispiel zufällig so gewählt sein sollte, dass es passt: Ich wollte jetzt nicht alle Präprozessoranweisungen im Kopf auflösen <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="🙂"
    /> . Jedenfalls ist der ganze Vorgang hochgradig störanfällig gegenüber Veränderungen der include-Reihenfolge. Welcher Header am Ende zuerst eingebunden wird ist nur schwer vorhersehbar.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445337</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 04 Mar 2015 23:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Thu, 05 Mar 2015 07:33:31 GMT]]></title><description><![CDATA[<p>Einen Header zu machen, der alle anderen Header includiert macht nur dann Sinn, wenn man seine Header nicht mehr verändert. Sobald du nämlich einen Header änderst, müssen all deine Cpp-Dateien, welche diesen Header includieren neu kompiliert werden.<br />
Falls du Visual Studio verwendest gibt's da noch Vorkompilierte Header.<br />
Vorkompilierte Header sind aber auch nur dazu gut, den Kompiler die Header nicht neu kompilieren lassen zu müssen, falls Änderungen in einer Cpp vorgenommen wurden, welche Header aus der Vorkompilierten Header-Datei includieren. Diese Funktion ist also auch nur für Header geeignet, welche nicht mehr verändert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445354</guid><dc:creator><![CDATA[Mr.]]></dc:creator><pubDate>Thu, 05 Mar 2015 07:33:31 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Thu, 05 Mar 2015 11:46:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a><br />
Ah, OK, ja, verstanden <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>In <code>A.h</code> und <code>B.h</code> darf natürlich nicht <code>#include &quot;superheader.h&quot;</code> stehen.<br />
Sondern da steht <code>#include &quot;basisheader.h&quot;</code> , und <code>#include &quot;superheader.h&quot;</code> steht nur in allen Sourcefiles.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445399</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 05 Mar 2015 11:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Thu, 05 Mar 2015 11:47:04 GMT]]></title><description><![CDATA[<p>Mr. schrieb:</p>
<blockquote>
<p>Diese Funktion ist also auch nur für Header geeignet, welche nicht mehr verändert werden.</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445400</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 05 Mar 2015 11:47:04 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Thu, 05 Mar 2015 12:01:13 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: care to elaborate?<br />
Wann ist es sinnvoll Header, die sich noch in der Entwicklung befinden, in den precompiled header zu packen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445403</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Thu, 05 Mar 2015 12:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Thu, 05 Mar 2015 12:08:13 GMT]]></title><description><![CDATA[<p>Wenn es Header sind die sowieso so-gut-wie überall inkludiert werden müssen löst das effektiv sowieso einen kompletten Rebuild aus. Dann kann man die genau so gut gleich mit ins PCH File reintun. Speziell wenn sie richtig gross sind und viel Standard/Thirdparty Zeugs inkludieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445405</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 05 Mar 2015 12:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Header Aufteilung on Thu, 05 Mar 2015 12:13:45 GMT]]></title><description><![CDATA[<p>Na okay, darüber zu streiten ist wohl Korinthenkackerei. Bei mir sind Header, die sich in der Entwicklung befinden noch nicht überall in Verwendung. Andererseits entwickle ich Subsysteme/Header usw., also Zeug, das dann mal überall verwendet werden soll, sowieso meist in separaten Projekten.<br />
Wir wissen ja alle was die Folgen sind, so oder so, denke ich <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2445409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445409</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Thu, 05 Mar 2015 12:13:45 GMT</pubDate></item></channel></rss>