<?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[[Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif]]></title><description><![CDATA[<p>Guten Morgen zusammen,</p>
<p>ich hab eine kurze Frage: Wenn ich in meiner IDE (welche ich jetzt nichtmehr verwende, weshalb es mich jetzt interessiert) eine Header Datei erstelle, bekomme ich nicht nur eine nette .h/.hpp Datei, sondern da steht auch gleich was nettes drin, ca. so:</p>
<pre><code>#ifndef HEADER_H
#define HEADER_H
...
#endif // HEADER_H
</code></pre>
<p>Ich hab schon nachgeschaut. Bringt das also, dass wenn ich meine header.h an verschiedenen Stellen meines Programmes include, diese dann nicht mehrmals compiliert wird? Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
<p>Wäre über etwas Klarheit sehr dankbar. Und was mich natürlich am meisten interessiert: Soll ich diese 3 Zeilen dann auch bei meinen Header Dateien immer verwenden und ist das gut?</p>
<p>LG<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328868/gelöst-preprocessor-header-datei-ifndef-define-endif</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 07:59:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328868.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Oct 2014 08:41:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 08:58:57 GMT]]></title><description><![CDATA[<p>Guten Morgen zusammen,</p>
<p>ich hab eine kurze Frage: Wenn ich in meiner IDE (welche ich jetzt nichtmehr verwende, weshalb es mich jetzt interessiert) eine Header Datei erstelle, bekomme ich nicht nur eine nette .h/.hpp Datei, sondern da steht auch gleich was nettes drin, ca. so:</p>
<pre><code>#ifndef HEADER_H
#define HEADER_H
...
#endif // HEADER_H
</code></pre>
<p>Ich hab schon nachgeschaut. Bringt das also, dass wenn ich meine header.h an verschiedenen Stellen meines Programmes include, diese dann nicht mehrmals compiliert wird? Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
<p>Wäre über etwas Klarheit sehr dankbar. Und was mich natürlich am meisten interessiert: Soll ich diese 3 Zeilen dann auch bei meinen Header Dateien immer verwenden und ist das gut?</p>
<p>LG<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424831</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Thu, 30 Oct 2014 08:58:57 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 08:55:15 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Bringt das also, dass wenn ich meine header.h an verschiedenen Stellen meines Programmes include, diese dann nicht mehrmals compiliert wird?</p>
</blockquote>
<p>Ja.</p>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
<p>Ja (aber das sollte bei einer sauberen Headerstruktur nicht geschehen).</p>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Soll ich diese 3 Zeilen dann auch bei meinen Header Dateien immer verwenden und ist das gut?</p>
</blockquote>
<p>Ja, aber immer eindeutige Namen nehmen (und nicht beispielsweise <code>int_h</code> oder so)! Ich persönlich nehme beispielsweise solche: <code>xLib_Crypt_RC6_hpp_included</code> oder <code>yLib_TypeTraits_hpp_included</code><br />
Also nach der Grammatik: LibName ## _ ## ( SubLibName ## _ ## )<sub>opt</sub> HeaderName ## _ ## HeaderExtention ## _included</p>
<p>Edit: Quoten eingefügt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424834</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 30 Oct 2014 08:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 08:58:47 GMT]]></title><description><![CDATA[<p>OK danke, das hätte sich soweit geklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424835</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Thu, 30 Oct 2014 08:58:47 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 09:20:08 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
<p>Ja (aber das sollte bei einer sauberen Headerstruktur nicht geschehen).</p>
</blockquote>
<p>Wäre das wahr (mit der &quot;sauberen&quot; Struktur), könnte man sich die Includeguards sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424837</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 30 Oct 2014 09:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 09:35:33 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
<p>Ja (aber das sollte bei einer sauberen Headerstruktur nicht geschehen).</p>
</blockquote>
<p>Wäre das wahr (mit der &quot;sauberen&quot; Struktur), könnte man sich die Includeguards sparen.</p>
</blockquote>
<p>Nein, aus eben dem genannten Beispiel heraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424839</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 30 Oct 2014 09:35:33 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 09:37:44 GMT]]></title><description><![CDATA[<p>Auch bei einer sauberen Struktur hat man doppelte includes.</p>
<p>Du hast immer header Dateien die von anderen eingebunden werden müssen.<br />
Eine header Datei die zB eine string-Klasse zur Verfügung stellt, wird in vielen anderen Header Dateien eingebunden werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424840</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 30 Oct 2014 09:37:44 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 09:47:13 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
<p>Ja (aber das sollte bei einer sauberen Headerstruktur nicht geschehen).</p>
</blockquote>
<p>Wäre das wahr (mit der &quot;sauberen&quot; Struktur), könnte man sich die Includeguards sparen.</p>
</blockquote>
<p>Sehe ich nicht so. Zwei Header die denselben Header benötigen sind völlig normal und kommen auch in sauberen Strukturen vor (z.B. mehrere Header die <code>&lt;vector&gt;</code> oder <code>&lt;memory&gt;</code> verwenden). Zwei Header die sich gegenseitig brauchen sollten entweder nur ein oder mehrere kleinere Header sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424842</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 30 Oct 2014 09:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 10:01:49 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
<p>Ja (aber das sollte bei einer sauberen Headerstruktur nicht geschehen).</p>
</blockquote>
<p>Wäre das wahr (mit der &quot;sauberen&quot; Struktur), könnte man sich die Includeguards sparen.</p>
</blockquote>
<p>Sehe ich nicht so. Zwei Header die denselben Header benötigen sind völlig normal und kommen auch in sauberen Strukturen vor (z.B. mehrere Header die <code>&lt;vector&gt;</code> oder <code>&lt;memory&gt;</code> verwenden). Zwei Header die sich gegenseitig brauchen sollten entweder nur ein oder mehrere kleinere Header sein.</p>
</blockquote>
<p>Von gegenseitig steht da nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424844</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 30 Oct 2014 10:01:49 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 10:19:59 GMT]]></title><description><![CDATA[<p>Also HarteWare fragte: &quot;Kann man mit Include-Guards gegenseitiges inkludieren verhindern?&quot;<br />
Ich antwortete: &quot;Ja; in sauberen Headerstrukturen wird jedoch nicht gegenseitig inkludiert.&quot;<br />
Du: &quot;Nicht wahr, sonst bräuchte es da gar keine Include-Guards.&quot; (Hab ich das hier falsch verstanden?)<br />
Ich: Erklärung, wieso es Include-Guards auch ohne gegenseitiges Inkludieren braucht.<br />
Du: &quot;Von gegenseitigem Inkludieren war nicht die Rede.&quot; (Dabei sagte ich doch, dass &quot;saubere&quot; Headerstrukturen kein gegenseitiges Inkludieren durchführen)</p>
<p>Kann ich nicht ganz nachvollziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424846</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 30 Oct 2014 10:19:59 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 10:28:08 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>Also HarteWare fragte: &quot;Kann man mit Include-Guards gegenseitiges inkludieren verhindern?&quot;</p>
</blockquote>
<p>Ja? Wo?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424849</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 30 Oct 2014 10:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 10:34:52 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>Also HarteWare fragte: &quot;Kann man mit Include-Guards gegenseitiges inkludieren verhindern?&quot;</p>
</blockquote>
<p>Ja? Wo?</p>
</blockquote>
<p>Im OP?</p>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2424851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424851</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 30 Oct 2014 10:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 10:39:01 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>Also HarteWare fragte: &quot;Kann man mit Include-Guards gegenseitiges inkludieren verhindern?&quot;</p>
</blockquote>
<p>Ja? Wo?</p>
</blockquote>
<p>Im OP?</p>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
</blockquote>
<p>Nein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424852</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 30 Oct 2014 10:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 11:05:13 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>Also HarteWare fragte: &quot;Kann man mit Include-Guards gegenseitiges inkludieren verhindern?&quot;</p>
</blockquote>
<p>Ja? Wo?</p>
</blockquote>
<p>Im OP?</p>
<p>HarteWare schrieb:</p>
<blockquote>
<p>Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)</p>
</blockquote>
</blockquote>
<p>Nein, der TE hat wohl hiernach gefragt:<br />
headerB.h:</p>
<pre><code>#include &quot;header.h&quot;
...
</code></pre>
<p>header.h:</p>
<pre><code>...
</code></pre>
<p>main.cpp:</p>
<pre><code>#include &quot;header.h&quot;
#include &quot;headerB.h&quot;
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2424859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424859</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Thu, 30 Oct 2014 11:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 11:10:03 GMT]]></title><description><![CDATA[<p>Hoppla, ja, ergibt viel mehr Sinn, sorry an alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424861</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 30 Oct 2014 11:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 11:40:30 GMT]]></title><description><![CDATA[<p>Alternativ kann man auch</p>
<pre><code>#pragma once
</code></pre>
<p>benutzen.. oder</p>
<pre><code>#import
</code></pre>
<p>statt</p>
<pre><code>#include
</code></pre>
<p>.</p>
<p>Aber die Include-Guards sind die gängigste Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424870</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Thu, 30 Oct 2014 11:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 12:04:21 GMT]]></title><description><![CDATA[<p>oenone schrieb:</p>
<blockquote>
<p>Alternativ kann man auch</p>
<pre><code>#pragma once
</code></pre>
<p>benutzen.. oder</p>
<pre><code>#import
</code></pre>
<p>statt</p>
<pre><code>#include
</code></pre>
<p>.</p>
<p>Aber die Include-Guards sind die gängigste Variante.</p>
</blockquote>
<p>AFAIK sind sie die einzige Standard konforme Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424880</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 30 Oct 2014 12:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 12:14:14 GMT]]></title><description><![CDATA[<p>oenone schrieb:</p>
<blockquote>
<p>Alternativ kann man auch</p>
<pre><code>#pragma once
</code></pre>
<p>benutzen..</p>
</blockquote>
<p>Besser, man benutzt es ergänzend:</p>
<pre><code>#ifndef bla
#define bla
#pragma once
…
#endif
</code></pre>
<p>Compiler müssen pragmas, die sie nicht kennen, ohne Fehler durchlassen. Das zusätzliche #pragma once kann also auf Compilern, die include-guards nicht so schlau wie GCC erkennen, die Sache beschleunigen.</p>
<p>oenone schrieb:</p>
<blockquote>
<p>oder</p>
<pre><code>#import
</code></pre>
<p>statt</p>
<pre><code>#include
</code></pre>
<p>.</p>
</blockquote>
<p>Ich fürchte, das geht auf GCC aber nicht auf MSVC. Außerdem soll der Verwender nicht wissen müssen, ob der Header nur einmal rein darf und soll. Ganz schlechtes Design das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424882</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 30 Oct 2014 12:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif on Thu, 30 Oct 2014 12:37:38 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>oenone schrieb:</p>
<blockquote>
<p>oder</p>
<pre><code>#import
</code></pre>
<p>statt</p>
<pre><code>#include
</code></pre>
<p>.</p>
</blockquote>
<p>Ich fürchte, das geht auf GCC aber nicht auf MSVC. Außerdem soll der Verwender nicht wissen müssen, ob der Header nur einmal rein darf und soll. Ganz schlechtes Design das.</p>
</blockquote>
<p>Ja, import ist eher bei Objective-C üblich. Da GCC die Sprache auch unterstützt, wurde es wohl auch für C und C++ übernommen.</p>
<p>Bei MSVC hat import außerdem eine andere Bedeutung: <a href="http://msdn.microsoft.com/en-us/library/8etzzkb6.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/8etzzkb6.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424889</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Thu, 30 Oct 2014 12:37:38 GMT</pubDate></item></channel></rss>