<?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[#define]]></title><description><![CDATA[<p>Hallo,<br />
ich hoffe mein Beitrag ist richtig platziert <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="🙂"
    /><br />
ich habe ein &quot;Verständnis&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Problem und bitte um Hilfe:</p>
<pre><code>//Switch Interface Switch.hpp
void fkt(void);

#if (#define (A))
	#import &quot;A.hpp&quot;
#else if (#define (B))
	#import &quot;B.hpp&quot;
#endif()

//Switch Impl. Switch.cpp
#import &quot;Switch.hpp&quot;

void fkt(void){

#if (#define (A))
	fkt_A();
#else if (#define (B))
	fkt_B();
#endif()
}

//A.hpp
void fkt_A(void);

//A.cpp
#import &quot;A.hpp&quot;
void fkt_A(){
printf(&quot;fkt_A&quot;);
}

//B.hpp
void fkt_B(void);

//B.cpp
#import &quot;B.hpp&quot;
void fkt_B(){
	printf(&quot;fkt_B&quot;);
}

//main
#import &quot;Switch.hpp&quot;

#ifndef A
#define A
#endif

int main(int argc, char **argv){
	fkt();
	return 0;
}
</code></pre>
<p>1. warum ist die Ausgabe immer &quot;fkt_B&quot; egal was in &quot;define&quot; steht?<br />
2. wie konnte man &quot;Switch&quot; so elegant machen, so dass nicht zweimal die Abfrage #if.. (einmal in switch.hpp und in switch.cpp) vorkommt?</p>
<p>vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290527/define</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 04:43:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290527.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Jul 2011 12:00:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to #define on Thu, 28 Jul 2011 12:00:51 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich hoffe mein Beitrag ist richtig platziert <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="🙂"
    /><br />
ich habe ein &quot;Verständnis&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Problem und bitte um Hilfe:</p>
<pre><code>//Switch Interface Switch.hpp
void fkt(void);

#if (#define (A))
	#import &quot;A.hpp&quot;
#else if (#define (B))
	#import &quot;B.hpp&quot;
#endif()

//Switch Impl. Switch.cpp
#import &quot;Switch.hpp&quot;

void fkt(void){

#if (#define (A))
	fkt_A();
#else if (#define (B))
	fkt_B();
#endif()
}

//A.hpp
void fkt_A(void);

//A.cpp
#import &quot;A.hpp&quot;
void fkt_A(){
printf(&quot;fkt_A&quot;);
}

//B.hpp
void fkt_B(void);

//B.cpp
#import &quot;B.hpp&quot;
void fkt_B(){
	printf(&quot;fkt_B&quot;);
}

//main
#import &quot;Switch.hpp&quot;

#ifndef A
#define A
#endif

int main(int argc, char **argv){
	fkt();
	return 0;
}
</code></pre>
<p>1. warum ist die Ausgabe immer &quot;fkt_B&quot; egal was in &quot;define&quot; steht?<br />
2. wie konnte man &quot;Switch&quot; so elegant machen, so dass nicht zweimal die Abfrage #if.. (einmal in switch.hpp und in switch.cpp) vorkommt?</p>
<p>vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2098959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2098959</guid><dc:creator><![CDATA[lampda]]></dc:creator><pubDate>Thu, 28 Jul 2011 12:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Thu, 28 Jul 2011 12:06:44 GMT]]></title><description><![CDATA[<p>lampda schrieb:</p>
<blockquote>
<pre><code>#if (#define (A)) 
#endif()
#import &quot;Switch.hpp&quot;
</code></pre>
</blockquote>
<p>Wo hast du denn den Käse her??<br />
Dir ist klar, dass es hier im Forum um C++ geht? Das was du da schreibst, hat zwar entfernte Ähnlichkeit mit C++-Präprozessor-Befehlen, aber eben nur entfernt.</p>
<p>Ein aktuelles Buch deiner Wahl sollte da weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2098963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2098963</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 28 Jul 2011 12:06:44 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Thu, 28 Jul 2011 12:11:06 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Dir ist klar, dass es hier im Forum um C++ geht? Das was du da schreibst, hat zwar entfernte Ähnlichkeit mit C++-Präprozessor-Befehlen, aber eben nur entfernt.</p>
</blockquote>
<p>Das sind, wenn mich mein Blick nicht trügt, Erweiterungen des Präprozessors für den GNU Compiler. Frag mich aber nicht, was die genau machen. Sie sind übrigens schon allesamt lange deprecated.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2098966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2098966</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 28 Jul 2011 12:11:06 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Thu, 28 Jul 2011 12:16:31 GMT]]></title><description><![CDATA[<p>Präprozessor Direktiven werden einmal beim Parsen ausgewertet.<br />
Dabei wird das Programm sequentiell von oben nach unten gelesen. (#include wird halt dazwischen 'eingefügt')<br />
Zu dem Zeitpunkt wo du zu Zeile 4 kommst, ist A nicht definiert.</p>
<p>Siehe auch folgendes kurzes Beispiel:</p>
<pre><code class="language-cpp">//#define A

#ifdef A
        #error A
#else
        #error B
#endif

#define A
</code></pre>
<p>Wenn du es davor definest, dann kriegst error A, sonst B</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2098974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2098974</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 28 Jul 2011 12:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 00:00:05 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Präprozessor Direktiven werden einmal beim Parsen ausgewertet.<br />
Dabei wird das Programm sequentiell von oben nach unten gelesen. (#include wird halt dazwischen 'eingefügt')<br />
Zu dem Zeitpunkt wo du zu Zeile 4 kommst, ist A nicht definiert.</p>
<p>Siehe auch folgendes kurzes Beispiel:</p>
<pre><code class="language-cpp">//#define A

#ifdef A
        #error A
#else
        #error B
#endif

#define A
</code></pre>
<p>Wenn du es davor definest, dann kriegst error A, sonst B</p>
<p>Gruß,<br />
XSpille</p>
</blockquote>
<p>vielen Dank für Eure Hilfe.<br />
es funktioniert nur wenn #define A in Switch.hpp platziert ist, aber das ist nicht was ich vor habe. Ich möchte #define von aussen für Switch.hpp setzen..<br />
(Switch.hpp/cpp soll später nach black-Box-prinzip behandelt werden)</p>
<p>das hat mit dem Parser nicht zu tun, da der Code nicht wie im Beitrag aussieht, sondern es sind eigenständige &quot;klassen&quot;.</p>
<p>ich dachte der übersetzer fängt bei main an und da ist #define A gesetzt, aber irgendwie verliert er diese wenn er bei Switch.hpp ist. Warum?<br />
ist das Problem, dass: main kennt Switch.hpp aber nicht umgekehrt. wie kann ich das lösen ohne circle-effekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099255</guid><dc:creator><![CDATA[lampda]]></dc:creator><pubDate>Fri, 29 Jul 2011 00:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 00:14:52 GMT]]></title><description><![CDATA[<p>Ich habe mir das da oben nicht angetan, aber hilft dir nicht einfach:</p>
<pre><code class="language-cpp">#ifndef MY_HPP
#define MY_HPP

// ..

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2099256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099256</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 29 Jul 2011 00:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 09:18:51 GMT]]></title><description><![CDATA[<p>Vielleicht wäre eher dies etwas für dich:<br />
<a href="http://en.wikipedia.org/wiki/Policy-based_design" rel="nofollow">http://en.wikipedia.org/wiki/Policy-based_design</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099330</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 29 Jul 2011 09:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 11:26:58 GMT]]></title><description><![CDATA[<p>Du solltest #define besser nur in der Schreibweise einer Textersetzung verwenden, so dass vom Präprozessor eindeutig vorbereitete Sourcetexte zum Compilieren angesprochen sind. Es wird dann die Variante A oder B compiliert - nützlich z.B. zur Unterscheidung einer Testversion von einer Releaseversion. Während der Laufzeit mit switch lassen sich nur zuvor auch compilierte Varianten - etwa von Funktionen - auswählen.</p>
<p>Vielleicht erläuterst du einmal genauer, wozu das ganze dienen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099371</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Fri, 29 Jul 2011 11:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 11:44:09 GMT]]></title><description><![CDATA[<p>lampda schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Entwickelst du auf Mac OS X?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099386</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Fri, 29 Jul 2011 11:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 12:55:44 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Du solltest #define besser nur in der Schreibweise einer Textersetzung verwenden, so dass vom Präprozessor eindeutig vorbereitete Sourcetexte zum Compilieren angesprochen sind. Es wird dann die Variante A oder B compiliert - nützlich z.B. zur Unterscheidung einer Testversion von einer Releaseversion. Während der Laufzeit mit switch lassen sich nur zuvor auch compilierte Varianten - etwa von Funktionen - auswählen.</p>
<p>Vielleicht erläuterst du einmal genauer, wozu das ganze dienen soll.</p>
</blockquote>
<p>vielen Dank!<br />
irgendwie kriege ich die kurve nicht hin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> das ist auch nicht mein Stärkebereich..</p>
<p>Du hast es erkannt. Ich möchte eine Rückwärtse-kompatibiltät zweier Programm-versionen (,die Plattform abhängig sind..) realiesieren. Der Plan war bzw. ist zur Laufzeit zu erkennen oder auch beim Projekterstellen die geeignete Funktion aus der passenden Version zu includieren..</p>
<p>ich muss zugeben mein Vorgehensweise ist nicht gerade die beste, aber leider fehlt mir da auch die nötige Kreativität.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099430</guid><dc:creator><![CDATA[lampda]]></dc:creator><pubDate>Fri, 29 Jul 2011 12:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 12:58:23 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>lampda schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Entwickelst du auf Mac OS X?</p>
</blockquote>
<p>das darf keine Rolle spielen. aber ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099434</guid><dc:creator><![CDATA[lampda]]></dc:creator><pubDate>Fri, 29 Jul 2011 12:58:23 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Fri, 29 Jul 2011 13:15:59 GMT]]></title><description><![CDATA[<p>Kanns sein, dass du so etwas suchst?</p>
<p>switch.hpp:</p>
<pre><code class="language-cpp">#include &quot;config.hpp&quot;
#include &quot;A.hpp&quot;
#include &quot;B.hpp&quot;
#include &quot;C.hpp&quot;

void foo()
{
#ifdef WINDOWS
 a();
#elif defined(LINUX)
 b();
#elif defined(MACOS)
 c();
#endif
}
</code></pre>
<p>config.hpp</p>
<pre><code class="language-cpp">// Hier eventuell für den Compiler anspassen 
// oder per Compileroption übergeben 
// oder für alle gängigen Compiler umschreiben

#ifdef _WIN32
 #define WINDOWS
#elif defined(__linux)
 #define LINUX
#elif defined (__MACH__)
 #define MACOS
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2099453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099453</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 29 Jul 2011 13:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Sun, 31 Jul 2011 07:30:57 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig verstehe, brauchst du nach OS zu unterscheidende Funktionen und möchtest alles aus möglichst einem Projekt machen. Der Ansatz ist schon mal gut. Vorschlag: Separiere die Funktionen nach OS und bilde eigenständige LIBs oder DLLs. Dann lässt sich mit #define, etc. die Einbindung in die jeweilge OS-Version übersichtlich konzentrieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099969</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Sun, 31 Jul 2011 07:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to #define on Wed, 03 Aug 2011 09:19:06 GMT]]></title><description><![CDATA[<p>vielen Dank für Eure Hilfe!<br />
Problem wurde gelöst in dem ich ein extra headerDatei mit den ganzen define's erstellt, und diese in Switch importiert. und damit ist der circle-effekt umgegangen. hoffe hilft das jemanden weiter .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101106</guid><dc:creator><![CDATA[lampda]]></dc:creator><pubDate>Wed, 03 Aug 2011 09:19:06 GMT</pubDate></item></channel></rss>