<?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[Include Sentinel]]></title><description><![CDATA[<p>Hi</p>
<p>Ich hab folgendes in nem Code Beispiel gefunden.<br />
Und zwar in nem .cpp File (WinMain.cpp)</p>
<pre><code class="language-cpp">#ifndef WINMAIN_H
#include &quot;WinMain.h&quot;
#endif
//... Code hier
</code></pre>
<p>im &quot;WinMain.h&quot; Header steht dann das mir bekannte:</p>
<pre><code class="language-cpp">#ifndef WINMAIN_H
#define WINMAIN_H

//... Code hier

#endif
</code></pre>
<p>ich dachte, dass der Wächter im Header ausreichend ist,<br />
Ist das trotzdem empfehlenswert?</p>
<p>thx</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147127/include-sentinel</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 00:34:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147127.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 May 2006 10:46:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Include Sentinel on Sun, 14 May 2006 10:46:15 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich hab folgendes in nem Code Beispiel gefunden.<br />
Und zwar in nem .cpp File (WinMain.cpp)</p>
<pre><code class="language-cpp">#ifndef WINMAIN_H
#include &quot;WinMain.h&quot;
#endif
//... Code hier
</code></pre>
<p>im &quot;WinMain.h&quot; Header steht dann das mir bekannte:</p>
<pre><code class="language-cpp">#ifndef WINMAIN_H
#define WINMAIN_H

//... Code hier

#endif
</code></pre>
<p>ich dachte, dass der Wächter im Header ausreichend ist,<br />
Ist das trotzdem empfehlenswert?</p>
<p>thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057479</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Sun, 14 May 2006 10:46:15 GMT</pubDate></item><item><title><![CDATA[Reply to Include Sentinel on Sun, 14 May 2006 11:32:15 GMT]]></title><description><![CDATA[<p>Hallo,<br />
diese sogenannten &quot;internal&quot; bzw. &quot;redundanten&quot; Include-Guards helfen bei großen Projekten und &quot;dummen&quot; Compilern/Präprozessoren die Compilezeit zu reduzieren.</p>
<p>Angenommen du hast eine cpp-Datei die über Umwege zweimal ein</p>
<blockquote>
<p>#include &quot;WinMain.h&quot;</p>
</blockquote>
<p>enthält. Die normalen Include-Guards sorgen nun dafür, dass das Ergebnis korrekt ist (also Symbole nicht mehrfach in der Übersetzungseinheit auftreten). Trotzdem muss der Präprozessor die Datei WinMain zweimal öffnen und zweimal komplett lesen. Beim zweiten Durchlauf sieht der Präprozessor in der ersten Zeile, dass der Include-Guard gestzt ist. Auf der Suche nach dem passenden #endif muss er trotzdem alle nachfolgenden Zeilen lesen und anschauen.</p>
<p>Hier helfen die redundanten Include-Guards. Diese sorgen dafür, dass eine Include-Datei pro Übersetzungseinheit garantiert nur einmal geöffnet werden muss.</p>
<p>Bringen tun diese redundanten Include-Guards nur dann etwas, wenn dein Projekt eine gewisse Größe erreicht und bestimmte Header sehr häufig inkludiert werden (Beispiel: Header der Standardbibliothek).</p>
<p>Mal davon abgesehen, dass moderne Compiler bessere Alternativen anbieten: Vorkompilierte Header, pragma once-Direktiven, &quot;schlauere&quot; Präprozessoren (die sich merken, welcher Header für welche ÜE schon gelesen wurde).</p>
<p>Wenn du also nicht gerade eine BS-API oder eine hyperportable Standardbibliothek schreibst, kannst du meiner Meinung nach auf redundante Guards verzichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057498</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 14 May 2006 11:32:15 GMT</pubDate></item><item><title><![CDATA[Reply to Include Sentinel on Sun, 14 May 2006 11:44:37 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Hallo,<br />
diese sogenannten &quot;internal&quot; bzw. &quot;redundanten&quot; Include-Guards helfen bei großen Projekten und &quot;dummen&quot; Compilern/Präprozessoren die Compilezeit zu reduzieren.</p>
</blockquote>
<p>Du meinst VC++ 6 ist &quot;dumm&quot;? <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 />
Ich hab das Beispiel aus nem schon etwas älteren Artikel. Benutze selber aber 2005er Version von Visual Studio.</p>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Angenommen du hast eine cpp-Datei die über Umwege zweimal ein</p>
<blockquote>
<p>#include &quot;WinMain.h&quot;</p>
</blockquote>
<p>enthält. Die normalen Include-Guards sorgen nun dafür, dass das Ergebnis korrekt ist (also Symbole nicht mehrfach in der Übersetzungseinheit auftreten). Trotzdem muss der Präprozessor die Datei WinMain zweimal öffnen und zweimal komplett lesen. Beim zweiten Durchlauf sieht der Präprozessor in der ersten Zeile, dass der Include-Guard gestzt ist. Auf der Suche nach dem passenden #endif muss er trotzdem alle nachfolgenden Zeilen lesen und anschauen.</p>
<p>Hier helfen die redundanten Include-Guards. Diese sorgen dafür, dass eine Include-Datei pro Übersetzungseinheit garantiert nur einmal geöffnet werden muss.</p>
<p>Bringen tun diese redundanten Include-Guards nur dann etwas, wenn dein Projekt eine gewisse Größe erreicht und bestimmte Header sehr häufig inkludiert werden (Beispiel: Header der Standardbibliothek).</p>
</blockquote>
<p>Ok tönt verständlich. Macht dann durchaus auch Sinn.</p>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Mal davon abgesehen, dass moderne Compiler bessere Alternativen anbieten: Vorkompilierte Header, pragma once-Direktiven, &quot;schlauere&quot; Präprozessoren (die sich merken, welcher Header für welche ÜE schon gelesen wurde).</p>
</blockquote>
<p>Also benutze ich im VS besser generell #pragma once statt den Include Guards?</p>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Wenn du also nicht gerade eine BS-API oder eine hyperportable Standardbibliothek schreibst, kannst du meiner Meinung nach auf redundante Guards verzichten.</p>
</blockquote>
<p>Ne, sowas dann nicht. Es ist ein Artikel über DirectX8 und 2D Graphik mit nur einem File. Also wohl eher übervorsichtig der Author, oder aus Routine.</p>
<p>Danke jedenfalls <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
man lernt nie aus<br />
bye</p>
<p>edit: quote tags repariert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057502</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Sun, 14 May 2006 11:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to Include Sentinel on Sun, 14 May 2006 12:26:00 GMT]]></title><description><![CDATA[<p>spricht nichts gegen pragma once, aber du solltest das pragma once in nen #ifdef-block packen</p>
<p>ungefähr so</p>
<pre><code class="language-cpp">#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP

#ifdef _MSC_VER
#pragma once
#endif

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1057525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057525</guid><dc:creator><![CDATA[Dr. Prof]]></dc:creator><pubDate>Sun, 14 May 2006 12:26:00 GMT</pubDate></item></channel></rss>