<?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[Kompilierreihenfolge?]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>vorneweg gesagt: Ich benutze das VS6.<br />
Ich habe eine CPP Datei mit der main Funktion. Diese bindet den Header einer Klasse ein die ich benutzen will. Wenn ich nun kompiliere wird gesagt das Define xyz nicht definiert ist. Also schreibe ich VOR der inluce für die Klasse in der CPP Datei meine Define Anweisung. Trotzdem kommt die Meldung das xyz nicht definiert sei.</p>
<p>Wie kompiliert also der VS6 Kompiler mein Projekt? Wird da wild durcheinander jedes Source Schnipsel kompiliert? (Gut zu wissen, denn dann bräuchte ich keine Header Dateien mehr erstellen *g*) Oder wie läuft das? Welche Datei wird zuerst kompiliert? Dort würde ich dann mein Define vornehmen. Die vorkompilierten Headerdatei verwende ich nicht. Ich möchte den Define auch nicht in den Projekt Settings vornehmen. (Wenn ich es dennoch tue läuft alles.)</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177720/kompilierreihenfolge</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 13:42:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177720.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Apr 2007 12:39:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 12:39:45 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>vorneweg gesagt: Ich benutze das VS6.<br />
Ich habe eine CPP Datei mit der main Funktion. Diese bindet den Header einer Klasse ein die ich benutzen will. Wenn ich nun kompiliere wird gesagt das Define xyz nicht definiert ist. Also schreibe ich VOR der inluce für die Klasse in der CPP Datei meine Define Anweisung. Trotzdem kommt die Meldung das xyz nicht definiert sei.</p>
<p>Wie kompiliert also der VS6 Kompiler mein Projekt? Wird da wild durcheinander jedes Source Schnipsel kompiliert? (Gut zu wissen, denn dann bräuchte ich keine Header Dateien mehr erstellen *g*) Oder wie läuft das? Welche Datei wird zuerst kompiliert? Dort würde ich dann mein Define vornehmen. Die vorkompilierten Headerdatei verwende ich nicht. Ich möchte den Define auch nicht in den Projekt Settings vornehmen. (Wenn ich es dennoch tue läuft alles.)</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258578</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 03 Apr 2007 12:39:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 12:44:13 GMT]]></title><description><![CDATA[<p>ZubX schrieb:</p>
<blockquote>
<p>Wenn ich nun kompiliere wird gesagt das Define xyz nicht definiert ist.</p>
</blockquote>
<p>Wie lautet die Fehlermeldung genau, und wie sieht der Code aus, der die Fehlermeldung erzeugt?</p>
<blockquote>
<p>Also schreibe ich VOR der inluce für die Klasse in der CPP Datei meine Define Anweisung. Trotzdem kommt die Meldung das xyz nicht definiert sei.</p>
</blockquote>
<p>Dann machst du etwas falsch.</p>
<blockquote>
<p>Wie kompiliert also der VS6 Kompiler mein Projekt? Wird da wild durcheinander jedes Source Schnipsel kompiliert? (Gut zu wissen, denn dann bräuchte ich keine Header Dateien mehr erstellen *g*) Oder wie läuft das? Welche Datei wird zuerst kompiliert? Dort würde ich dann mein Define vornehmen.</p>
</blockquote>
<p>Die Reihenfolge der Kompilierung ist für dich nicht wichtig. Jede Übersetzungseinheit (.cpp-Datei) wird einzeln kompiliert. Wenn du also in mehreren ÜEn etwas brauchst, dann musst du dies eben in all diesen ÜEn hinzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258582</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 03 Apr 2007 12:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 12:44:31 GMT]]></title><description><![CDATA[<p>Ich würde es mal in der Datei der Klasse versuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258583</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 03 Apr 2007 12:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 14:11:08 GMT]]></title><description><![CDATA[<p>Beispiel:</p>
<p>In der Headerdatei aaaa.h steht dieses:</p>
<pre><code class="language-cpp">#ifdef MYDEF
const int myint=6;
#endif
</code></pre>
<p>In meinem main Modul steht dieses</p>
<pre><code class="language-cpp">#define MYDEF
#include &quot;aaaa.h&quot;
//#define MYDEF

int main(int argc, char* argv[]) {
	printf(&quot;Hello %d World!\n&quot;, myint);
	return 0;
}
</code></pre>
<p>So wie es jetzt dort steht funktioniert es, steht der Define hinter der Include Anweisung gibt es eine Fehlermeldung. Also geht der Präprozessor (ich habe Kompiler und Präprozessor in meinem ersten Posting verwechselt) zuerst in das Modul wo die Main Funktion steht.</p>
<p>Ich habe nun in meinem eigentlichen Projekt als erste Anweisung &quot;#define NATIVE_CODE&quot; geschrieben. Danach die Include Anweisungen die Header einbinden wo NATIVE_CODE definiert sein muesste. Wenn der Präprozesser aber in die Header geht ist NATIVE_CODE undefiniert. Ein #undef Anweisung kann ich nicht finden. Wird NATIVE_CODE irgendwo in den Windows oder MFC Headern verwendet (wieder undefiniert)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258642</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 03 Apr 2007 14:11:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 14:18:55 GMT]]></title><description><![CDATA[<p>ZubX schrieb:</p>
<blockquote>
<p>Also geht der Präprozessor (ich habe Kompiler und Präprozessor in meinem ersten Posting verwechselt) zuerst in das Modul wo die Main Funktion steht.</p>
</blockquote>
<p>Der Präprozessor bearbeitet <strong>nur</strong> die cpp-Datei. Er ersetzt dabei die Include-Direktive durch den Inhalt der Headerdatei. Damit sollte klar sein, warum das nicht klappt, wenn die Definedirektive hinter der Includedirektive steht, denn das ist das, was danach der Compiler bekommt:</p>
<pre><code class="language-cpp">#ifdef MYDEF
const int myint=6;
#endif
#define MYDEF

int main(int argc, char* argv[]) {
    printf(&quot;Hello %d World!\n&quot;, myint);
    return 0;
}
</code></pre>
<blockquote>
<p>Wenn der Präprozesser aber in die Header geht ist NATIVE_CODE undefiniert.</p>
</blockquote>
<p>Wiederum: Zeig die Fehlermeldung und den Code. Dein Beispielcode tut's ja offenbar nicht, der funktioniert, so wie er soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258646</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 03 Apr 2007 14:18:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 14:41:09 GMT]]></title><description><![CDATA[<p>Welche Cpp Datei wird denn als erstes bearbeitet? Die wo die main Funktion drin ist? Wenn ich nun in dieser Datei als erste Anweisung mein Define setze sollte doch das Define bis zum Arbeitsende des Präprozesseros definiert sein?</p>
<p>Kode kann ich nicht zeigen, weil ich den Fehler noch nicht eingrenzen kann. Die Fehlermeldung ist das eine bestimmte Funktion (funcAbc) nicht definiert ist.</p>
<pre><code class="language-cpp">// Code innerhalb von aaaa.cpp
#ifdef xyz
int aaaa::funcAbc() {
	...
}
#endif
</code></pre>
<p>In dem main Modul ist als erstes Anweisung #define xyz. Ich kann funcAbc aber nicht innerhalb von main aufrufen, weil es nicht definiert.</p>
<p>Wenn ich nun in den Projektsettings xyz definiere (und nicht in meiner main.cpp) funktioniert alles. Der Kode ist also Ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258656</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 03 Apr 2007 14:41:09 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 16:51:41 GMT]]></title><description><![CDATA[<p>Jede Datei wird unabhängig voneinander durch den Präprozessor (der kümmert sich um #include's, #define's und #if's) gejagt und übersetzt. Wenn der Compiler alle Dateien übersetzt hat, gibt er sie an den Linker weiter, der sie dann zusammenfügt.</p>
<p>Das heißt in deinem Fall: Wenn der Compiler die main.cpp bearbeitet, bindet er alle dort eingebundenen Header ein und übersetzt (in der aaaa.h steht dann vermutlich auch die Definition der Klasse aaaa). Deine aaaa.cpp wird dabei nicht angefasst. Wenn er sich die aaaa.cpp vornimmt, passiert das gleiche - da in dieser Übersetzungseinheit aber das Makro 'xyz' nicht definiert ist, übergeht er diese Definition einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258733</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 03 Apr 2007 16:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 18:19:08 GMT]]></title><description><![CDATA[<p>Das heißt der Präprozessor fängt mit irgendeiner Cpp Datei an. Nicht (unbedingt) mit der wo main() drin ist.<br />
Vielen Dank Euch allen für die Aufklärung <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1258773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258773</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 03 Apr 2007 18:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Tue, 03 Apr 2007 18:29:33 GMT]]></title><description><![CDATA[<p>ZubX schrieb:</p>
<blockquote>
<p>Das heißt der Präprozessor fängt mit irgendeiner Cpp Datei an. Nicht (unbedingt) mit der wo main() drin ist.<br />
Vielen Dank Euch allen für die Aufklärung <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>
</blockquote>
<p>Du hast es immer noch nicht verstanden. Es ist egal, in welcher Reihenfolge die Dateien kompiliert werden, weil die Kompilierung von main.cpp und die von aaaa.cpp absolut nichts miteinander zu tun haben. Präprozessordefinitionen sind nur für die Übersetzungseinheit gültig, in der sie stehen. Sie werden nicht von einer ÜE zur nächsten &quot;vererbt&quot;.</p>
<p>Durch nichts, was du in main.cpp mit dem Präprozessor anstellst, kannst du diese Ifdef-Direktive in aaaa.cpp beeinflussen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258783</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 03 Apr 2007 18:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Wed, 04 Apr 2007 02:17:53 GMT]]></title><description><![CDATA[<p>ZubX schrieb:</p>
<blockquote>
<p>Das heißt der Präprozessor fängt mit irgendeiner Cpp Datei an. Nicht (unbedingt) mit der wo main() drin ist.<br />
Vielen Dank Euch allen für die Aufklärung <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>
</blockquote>
<p>Um das nochmal klarzustellen: jede Datei wird &quot;alleine&quot; übersetzt, als ob es keine anderen zu übersetzenden Dateien gäbe. Die einzige Ausnahme hier ist die<br />
#include &lt;file&gt;<br />
bzw.<br />
#include &quot;file&quot;<br />
Anweisung, die eben vom Präprozessor durch den Inhalt von &quot;file&quot; (EDIT: den Inhalt des Files namens &quot;file&quot;) ersetzt wird.</p>
<p>Und eben weil jede Datei &quot;so übersetzt wird als ob es sonst nix gäbe&quot; ist es auch egal in welcher Reihenfolge sie übersetzt werden.</p>
<p>Und natürlich gibt es wieder eine Ausnahme, nämlich falls man vorkompilierte Headerdateien verwendet muss natürlich die Datei welche zum Erstellen der vorkompilierten Headerdatei verwendet wird als erste übersetzt werden -- sonst steht ja für die weiteren Dateien die vorkompilierten Headerdatei nicht zur Verfügung. Sollte auch klar sein.</p>
<p>EDIT2: falls du dich jetzt wunderst wie die &quot;alleine übersetzten&quot; Dateien dann &quot;zusammenfinden&quot;: das ist ein eigener Schritt der folgt nachdem alle Dateien übersetzt wurden, und nennt sich &quot;linken&quot; (und das Tool welches das macht bezeichnet man als &quot;Linker&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258906</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 04 Apr 2007 02:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierreihenfolge? on Wed, 04 Apr 2007 11:25:30 GMT]]></title><description><![CDATA[<p>Jetzt verstehe ich. Der Präprozessor schnappt sich eine Cpp, arbeitet seine Anweisungen ab und setzt danach seine Umgebung zurück. Die nächste Cpp kann also keine Definitionen der vorhergehenden Cpp verwenden.</p>
<p>Vielen Dank Euch allen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1259166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1259166</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Wed, 04 Apr 2007 11:25:30 GMT</pubDate></item></channel></rss>