<?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[Problem mit #if #elif und #else]]></title><description><![CDATA[<p>Moin zusammen,<br />
ich komme bei folgendem Code nicht weiter:</p>
<pre><code>#include &lt;conio.h&gt;
#include &lt;iomanip&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;
using namespace std;

int i=5;

#if(i==4)
	#define E &quot;IF&quot;
#elif(i==5)
	#define E &quot;ELIF&quot;
#else
	#define E &quot;ELSE&quot;
#endif

int main()
{
	cout&lt;&lt;i&lt;&lt;endl&lt;&lt;E&lt;&lt;endl;

	return 0;
}
</code></pre>
<p>Meiner Meinung nach müsste nun &quot;5&quot; und dann &quot;ELIF&quot; ausgegeben werden. Stattdessen werden &quot;5&quot; und &quot;ELSE&quot; ausgegeben. Ich kann mir nicht erklären, warum nicht &quot;ELIF&quot; ausgegeben wird und würde gerne wissen, wo der Fehler liegt.</p>
<p>Vielen Dank schonmal im Voraus</p>
<p>Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326627/problem-mit-if-elif-und-else</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 15:59:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326627.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Jun 2014 12:20:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit #if #elif und #else on Fri, 27 Jun 2014 12:20:02 GMT]]></title><description><![CDATA[<p>Moin zusammen,<br />
ich komme bei folgendem Code nicht weiter:</p>
<pre><code>#include &lt;conio.h&gt;
#include &lt;iomanip&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;
using namespace std;

int i=5;

#if(i==4)
	#define E &quot;IF&quot;
#elif(i==5)
	#define E &quot;ELIF&quot;
#else
	#define E &quot;ELSE&quot;
#endif

int main()
{
	cout&lt;&lt;i&lt;&lt;endl&lt;&lt;E&lt;&lt;endl;

	return 0;
}
</code></pre>
<p>Meiner Meinung nach müsste nun &quot;5&quot; und dann &quot;ELIF&quot; ausgegeben werden. Stattdessen werden &quot;5&quot; und &quot;ELSE&quot; ausgegeben. Ich kann mir nicht erklären, warum nicht &quot;ELIF&quot; ausgegeben wird und würde gerne wissen, wo der Fehler liegt.</p>
<p>Vielen Dank schonmal im Voraus</p>
<p>Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405922</guid><dc:creator><![CDATA[pattata]]></dc:creator><pubDate>Fri, 27 Jun 2014 12:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit #if #elif und #else on Fri, 27 Jun 2014 12:28:03 GMT]]></title><description><![CDATA[<p>Die Präprozessorinstruktionen <code>#if</code> etc. arbeiten mit Makros, nicht mit Variablen. <code>i</code> ist kein Makro, daher kann auch <code>i</code> weder 4 noch 5 sein.<br />
Wieso arbeitest du nicht mit <code>if</code> ?</p>
<p>Kleines Beispiel für korrektes <code>#if</code> :</p>
<pre><code>#define LibVersion 5
#if (LibVersion &gt; 3)
Lib::NewThing();
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2405923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405923</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Fri, 27 Jun 2014 12:28:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit #if #elif und #else on Fri, 27 Jun 2014 12:28:17 GMT]]></title><description><![CDATA[<p>Weil das Präprozessor-Befehle sind und kein C++. Der Präprozessor ersetzt das alles, bevor der Compiler dran kommt. Und zu dem Zeitpunkt gibt es noch keine Variablen.</p>
<p>Nach dem Präprozessor sieht das dann so aus:</p>
<pre><code>//... die ganzen includes lass ich mal weg
using namespace std;

int i=5;

int main()
{
    cout&lt;&lt;i&lt;&lt;endl&lt;&lt;&quot;ELSE&quot;&lt;&lt;endl;

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2405924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405924</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Fri, 27 Jun 2014 12:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit #if #elif und #else on Fri, 27 Jun 2014 12:29:55 GMT]]></title><description><![CDATA[<p>Der Fehler ist dass du den Präprozessor benutzt. Der Präprozessor kann nur Textersetzung und kein C++. Das i in Zeile 9 hat nichts mit dem i in Zeile 7 zu tun. Das i in Zeile 9 ist nicht definiert und deshalb wird i==4 als falsch bewertet. Gleiches gilt für i==5. Dann geht er in den #else-Zweig.<br />
Wenn du normales if und else benutzt verschwinden diese Probleme. Alternativ definiere dein i als #define i 5, dann klappt auch das #if #else.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405925</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Fri, 27 Jun 2014 12:29:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit #if #elif und #else on Fri, 27 Jun 2014 12:34:11 GMT]]></title><description><![CDATA[<p>Du solltest dir mal anschauen, wie das Kompilieren von C/C++ Code so abläuft.<br />
Vor der eigentlichen Kompilation rennt zunächst der sogenannte Präprozessor über deinen Code und verarbeitet &quot;Präprozessordirektiven&quot;.</p>
<p>Zu diesen Direktiven zählen z.B. #if und Konsorten, sowie das allgegenwärtige #include. Diese Direktiven werden vom Präprozessor verarbeitet, welcher wiederum einfache Textersetzung durchführt. Das heißt, ein #include wird z.B. einfach durch den Inhalt des Headers ersetzt. ein #if, dessen Bedingung nicht erfüllt ist, wird rausgefiltert und #define's werden einfach durch ihren Wert ersetzt.</p>
<p>Das wichtigste: Der Präprozessor SPRICHT WEDER C NOCH C++! Er hat keine Ahnung, was dein &quot;int i = 5;&quot; macht. Es ist einfach da und er überliest es.</p>
<p>Folglich kennt der Präprozessor kein i, welches er mit 4 oder 5 vergleichen könnte und wählt daher den #else Pfad.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405926</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 27 Jun 2014 12:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit #if #elif und #else on Fri, 27 Jun 2014 12:39:33 GMT]]></title><description><![CDATA[<p>Alles klar, vielen Dank für die schnellen Antworten und entschuldigt die rückblickend etwas dumme Frage^^.</p>
<p>Gibt es eine Möglichkeit, das zu verlesende Makro durch Eingabe zu belegen, also bspw. durch cin?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405929</guid><dc:creator><![CDATA[pattata]]></dc:creator><pubDate>Fri, 27 Jun 2014 12:39:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit #if #elif und #else on Fri, 27 Jun 2014 12:44:50 GMT]]></title><description><![CDATA[<p>pattata schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit, das zu verlesende Makro durch Eingabe zu belegen, also bspw. durch cin?</p>
</blockquote>
<p>Das kann per Definition nicht gehen. Der Präprozessor läuft vor dem Kompilieren. Die Nutzereingabe läuft nach dem Kompilieren. Ohne Zeitmaschine wird das nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405930</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Fri, 27 Jun 2014 12:44:50 GMT</pubDate></item></channel></rss>