<?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[enum vs. #define]]></title><description><![CDATA[<p>Nabend,</p>
<p>Ich lese gerade mein C++ Buch und bin bei enum. Aber ich verstehe einfach nicht, worin der Unterschied zwischen normalen #define und enum besteht. Was ist so Vorteilhaft an enum??</p>
<p>Es kommt doch auf's selbe hinaus, ob ich nun</p>
<pre><code class="language-cpp">enum { elem1 = 1 } var1;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">#define var1 1;
</code></pre>
<p>kommt doch eig. auf's selbe hinaus? Okay, bei enum kann man den Inhalt später noch ändern, aber da könnte ich auch genauso gut eine normale Variable deklarieren und einen Wert zuweisen, oder?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174808/enum-vs-define</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 01:24:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174808.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Mar 2007 23:16:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to enum vs. #define on Sat, 03 Mar 2007 23:16:12 GMT]]></title><description><![CDATA[<p>Nabend,</p>
<p>Ich lese gerade mein C++ Buch und bin bei enum. Aber ich verstehe einfach nicht, worin der Unterschied zwischen normalen #define und enum besteht. Was ist so Vorteilhaft an enum??</p>
<p>Es kommt doch auf's selbe hinaus, ob ich nun</p>
<pre><code class="language-cpp">enum { elem1 = 1 } var1;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">#define var1 1;
</code></pre>
<p>kommt doch eig. auf's selbe hinaus? Okay, bei enum kann man den Inhalt später noch ändern, aber da könnte ich auch genauso gut eine normale Variable deklarieren und einen Wert zuweisen, oder?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238714</guid><dc:creator><![CDATA[Squall3]]></dc:creator><pubDate>Sat, 03 Mar 2007 23:16:12 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sat, 03 Mar 2007 23:23:54 GMT]]></title><description><![CDATA[<p>Ein Vorteil:</p>
<pre><code class="language-cpp">#define STATE_OFF 0
#define STATE_ON 1

void myfunc (int state);

myfunc(2); // oops

// besser:

enum State { STATE_OFF, STATE_ON };

void myfunc (State state);

myfunc(2); // not allwed
</code></pre>
<p>Scope-Vorteile, besseres Handling, also ich sehe eigentlich umgekehrt gar keinen einzigen Grund ein #define zu verwenden.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238720</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sat, 03 Mar 2007 23:23:54 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sat, 03 Mar 2007 23:27:58 GMT]]></title><description><![CDATA[<p>Ein enum hat einen Datentyp und einen definierten Wertebereich. Da kann der Compiler gewisse Prüfungen machen und z.B. Warnungen erzeugen wenn ein ungültiger Wert auftaucht.</p>
<p>Ein Define ist dagegen nicht einmal ein Element der Sprache C++, sondern eher ein Überbleibsel aus frühen Tagen von C. es ist lediglich eine simple Text-Ersetzungs die von dem Präprozessor ausgeführt wird bevor der Compiler läuft. Entsprechend hat ein define z.B. keinen Typ. Abgesehen von den üblichen Ausnahemn ist #define in C++ ein Zeichen für schelchtes OOP-Design.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238721</guid><dc:creator><![CDATA[hjha]]></dc:creator><pubDate>Sat, 03 Mar 2007 23:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sat, 03 Mar 2007 23:30:35 GMT]]></title><description><![CDATA[<p>Was ist an:</p>
<pre><code class="language-cpp">#define LOG(msg) Logger::log((msg), __FILE__, __LINE__);
</code></pre>
<p>schlechtes OOP-Design?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238724</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sat, 03 Mar 2007 23:30:35 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sat, 03 Mar 2007 23:54:48 GMT]]></title><description><![CDATA[<p>Ist doch gerade ein schönes Beispiel warum Macros schlecht sind. Wenn Du irgendwo im Code LOG(&quot;Hallo&quot;) stehen hast, woher weist Du dann welcher Code sich dahinter verbirgt? Richtig, Du mußt es nachschauen. Du mußt Dir aber auch bewußt machen unter welchen Umständen welcher Code da stehen wird und spätestens wenn es mehrere Bedingungen gibt könntest Du als Mensch da irgendwann auch einfach falsch liegen.</p>
<p>Im OOP-Umfeld würde ich solche Lösungen wie Log4J jederzeit über so einen Macro-wisch-wasch vorziehen.</p>
<p>Lustig wirds wenn Du so ein Macro wie:</p>
<p>#undef TRUE<br />
#define TRUE 0</p>
<p>hast... Lach nicht, das ist mir schon öfter begenet als mir lieb ist und die verantworlichen &quot;Programmierer&quot; hatten auch immer angeblich gute Gründe das so zu machen. (Nicht das ich diese mit ihnen geteilt hätte...)</p>
<p>Im Klartext kann sowas aber bedeuten, das TRUE in einem Sourcefile einen anderen Wert hat als in enem anderen, mit einem enum ist sowas nicht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238735</guid><dc:creator><![CDATA[hja]]></dc:creator><pubDate>Sat, 03 Mar 2007 23:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 00:13:41 GMT]]></title><description><![CDATA[<p>Squall3 schrieb:</p>
<blockquote>
<p>Nabend,</p>
<p>Ich lese gerade mein C++ Buch und bin bei enum. Aber ich verstehe einfach nicht, worin der Unterschied zwischen normalen #define und enum besteht. Was ist so Vorteilhaft an enum??</p>
</blockquote>
<p>#define wird vom Preprozesser behandelt. Das ist ein Programm was vor dem eigentlichen kompilieren aufgerufen wird und das Programm ist ziemlich dump. Es ersetzt einfach blind alles was auf das mit #define definierte Makro zutrifft. Dabei kümmert es sich nicht um Scopes, Namespaces oder was auch immer. Der Compiler bekommt am Ende den Quellcode mit der Ersetzung. Er sieht also auch nicht was du wolltest, sondern nur was passiert ist. Das kann zB bei Fehlermeldungen sehr verwirrend sein (weil der Compiler eben Fehlermeldungen zu einem Quellcode ausgibt, den du so gar nicht siehst)</p>
<p>enum dagegen ist ein Bestandteil der Programmiersprache und wird vom Compiler behandelt, mit allen Berücksichtigungen, die man normalerweise erwartet (Scopes, Namespaces etc.)</p>
<p>Daher sollte man #define versuchen zu vermeiden, wo man es vermeiden kann</p>
<blockquote>
<p>Okay, bei enum kann man den Inhalt später noch ändern, aber da könnte ich auch genauso gut eine normale Variable deklarieren und einen Wert zuweisen, oder?</p>
</blockquote>
<p>Du hast ja auch nur eine Variable deklariert</p>
<p>im Grunde hast du folgendes gemacht<br />
[cpp]enum { elem1 = 1 };</p>
<p>int var1 = elem1;[cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238739</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 04 Mar 2007 00:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 00:21:13 GMT]]></title><description><![CDATA[<p>hja schrieb:</p>
<blockquote>
<p>..., woher weist Du dann welcher Code sich dahinter verbirgt? Richtig, Du mußt es nachschauen.</p>
</blockquote>
<p>IDE erkennt und zeigt. Leider ist das in C++ so schwer möglich, ein weiterer Grund warum sich andere Sprachen derzeit auf dem Vormarsch befinden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>hja schrieb:</p>
<blockquote>
<p>Im OOP-Umfeld würde ich solche Lösungen wie Log4J jederzeit über so einen Macro-wisch-wasch vorziehen.</p>
</blockquote>
<p>Da bringst du aber ein 1A-Beispiel für C++, Ausschnitt aus der Log4cxx-Doku:</p>
<pre><code class="language-cpp">//
//    Use these instead of calling Logger methods directly.
//
#define LOG4CXX_DEBUG(logger, msg) ...
#define LOG4CXX_INFO(logger, msg) ...
#define LOG4CXX_WARN(logger, msg) ...
#define LOG4CXX_ERROR(logger, msg) ...
#define LOG4CXX_FATAL(logger, msg) ...
</code></pre>
<p>hja schrieb:</p>
<blockquote>
<p>Lustig wirds wenn Du so ein Macro wie:</p>
<p>#undef TRUE<br />
#define TRUE 0</p>
</blockquote>
<p>Wo habe ich behauptet, dass Makros eine gute Idee sind um Konstanten einzuführen. Die Verwendung von Makros deutet nur ganz einfach nicht auf ein schlechtes OOP-Design hin.</p>
<p>MfG SideWinder</p>
<p>Edits: Der Einsatz von Code-Tags wird immer schwieriger je später es ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238740</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 04 Mar 2007 00:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 01:44:33 GMT]]></title><description><![CDATA[<p>[quote=&quot;SideWinder]Wo habe ich behauptet, dass Makros eine gute Idee sind um Konstanten einzuführen. Die Verwendung von Makros deutet nur ganz einfach nicht auf ein schlechtes OOP-Design hin.<br />
[/quote]</p>
<p>eine Sache fällt mir zu dem Thema noch ein. Im Grunde untergräbt ein Macro einen Grundgedanken von OOP, die Kapselung von Sourcecode in einer Klasse, weil das Macro sich ähnlich einer globalen Variablen verhält und &quot;von außen&quot; Sourcecode in die Klasse bringt der obendrein Situativ anders sein kann. Dabei untergräbt das Makro Sicherheitsmaßnahmen wie privat, protected usw.</p>
<p>Jeder Mechanismus der die Datenkapselung verwaessert bzw aushebelt ist imho schelchtes OOP-Design.</p>
<p>PS: sorry, konnte nicht widerstehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238760</guid><dc:creator><![CDATA[hja]]></dc:creator><pubDate>Sun, 04 Mar 2007 01:44:33 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 10:59:55 GMT]]></title><description><![CDATA[<p>Hm da war doch auch noch was mit der Zeilenangabe bei Compilerfehlern.</p>
<pre><code class="language-cpp">#define abc 1

void f(std::string);

int main()
{
   f(abc);
}
</code></pre>
<p>Fehlermeldung:<br />
Zeile 7: 1 ist kein string</p>
<p>&quot;Wo steht da 1?&quot;</p>
<p>________________</p>
<pre><code class="language-cpp">enum( abc = 1}

void f(std::string);

int main()
{
   f(abc);
}
</code></pre>
<p>Fehlermeldung: Zeile 7 enum abc ist kein string.</p>
<p>Dürfte gerade bei komplexeren sachen leichter zu erkennen sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238839</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 04 Mar 2007 10:59:55 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 11:09:35 GMT]]></title><description><![CDATA[<p>benutz mal &quot; &quot;</p>
<p>und enums sind zahlen und keine strings</p>
<p>{ red, blue, yellow, grey = 100, black}</p>
<p>red = 0<br />
blue = 1<br />
...<br />
grey = 100<br />
black = 101</p>
<p>bei dem define kommt eine textersetzung ....<br />
also schreibst du rein abc(l), ist das ein string -.- ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238843</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Sun, 04 Mar 2007 11:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 14:13:22 GMT]]></title><description><![CDATA[<blockquote>
<p>bei dem define kommt eine textersetzung ....<br />
also schreibst du rein abc(l), ist das ein string -.- ?</p>
</blockquote>
<p>Nun ja, im Prinzip schon, doch std::string weiß das ohne weiteres einfach nicht <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/1238972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238972</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Sun, 04 Mar 2007 14:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 18:25:28 GMT]]></title><description><![CDATA[<p>im prinzip eben nicht -.- das ist ein parameter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239134</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Sun, 04 Mar 2007 18:25:28 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 18:51:51 GMT]]></title><description><![CDATA[<p>Mit define definierte Konstanten sind völlig Typlos, könnten also als fast alles geplant sein, wieso kann diese 1 dann nicht als Konstante vom Typ char geplant sein?<br />
Schließlich handelt es sich bei charvariablen ebenso wie bei ints um einen integralen Datentyp, weswegen man strings natürlich auch aus integrale Zahlen zusammensetzen kann.<br />
Gibt man z.B. char blub[] = { 72, 97, 108, 108, 111, 0 }; auf dem Bildschirm aus, erscheint dort &quot;Hallo&quot;, ersetzt man hier char durch int erschiene auf dem Bildschirm &quot;72971081081110&quot;(je nachdem welchen Hinweis man dem Compiler zur Interpretation angibt).<br />
Und diese 1 repräsentiert bei der (bei mir) standardmäßig gewählten Schriftart in der Konsole ein kleines Smilie :).</p>
<p>Nur das &quot;Problem&quot; ist, die meisten Compiler erdreisten bzw erbarmen sich (je nachdem wie man das denn sehen möchte) eine integrale Zeichenliterale ohne typanzeigenden Zusatz so zu interpretieren, als SEI(!) diese integrale Zeichenliterale vom Typ int.<br />
Sicherlich wird dies wohl deswegen so geregelt, weil dies wohl häufig so gedacht ist.</p>
<p>Doch ändert dies nichts an der Tatsache, dass eine 1 bzw irgendwelche anderen Zahlen als integrale Zeichenliterle, im Prinzip durchaus einen String bilden können.<br />
Die Angabe von (char)72 oder 'H' dürfte wohl äquivalent sein oO.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239149</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Sun, 04 Mar 2007 18:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 18:54:09 GMT]]></title><description><![CDATA[<p>@hja</p>
<p>SideWinder schrieb:</p>
<blockquote>
<p>Was ist an:</p>
<pre><code class="language-cpp">#define LOG(msg) Logger::log((msg), __FILE__, __LINE__);
</code></pre>
<p>schlechtes OOP-Design?<br />
MfG SideWinder</p>
</blockquote>
<p>gar nichts.<br />
auch an 5+5 ist kein schlechtes OOP-design zu erkennen.<br />
(/me fühlt ein &quot;java.lang.Math.oprator+(5,5)//nur so ist es OO&quot; anklopfen)<br />
vielleicht mag man herumspielen mit sachen wie</p>
<pre><code class="language-cpp">#define LOG(msg) Logger::log(__FILE__&lt;&lt;__LINE__)&lt;&lt;msg;
</code></pre>
<p>, um auch problemlos</p>
<pre><code class="language-cpp">LOG(&quot;cant open file &quot;&lt;&lt;fileName);
</code></pre>
<p>loggen zu können.<br />
aber sooft man es dreht und wendet, beim logging kommen stets makros heraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239150</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 04 Mar 2007 18:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 18:57:23 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>aber sooft man es dreht und wendet, beim logging kommen stets makros heraus.</p>
</blockquote>
<p>Auch nur, weil es in C++ keinen Stacktrace gibt, um die Position im Code zu ermitteln</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239155</guid><dc:creator><![CDATA[Um dagegen zu halten]]></dc:creator><pubDate>Sun, 04 Mar 2007 18:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Sun, 04 Mar 2007 22:36:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define abc 1

void f(std::string);

int main()
{
   f(abc);
}
</code></pre>
<p><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="😡"
    /></p>
<p>du übergibst als string also übergibst du einen parameter</p>
<p>ersetz sieht es dann so aus:</p>
<pre><code class="language-cpp">void f(std::string);

int main()
{
   f(1);
}
</code></pre>
<p>verstehste nun ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239269</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Sun, 04 Mar 2007 22:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 01:09:06 GMT]]></title><description><![CDATA[<p>Wie wäre es wenn du einfach liest was ich schreibe?</p>
<p>Nur weil der Compiler da mecker, heißt das doch noch lange nicht, dass eine 1 kein String sein kann.<br />
Sowohl int als auch char sind integrale Datentypen, beide speichern ganze Zahlen, hinter Buchstaben verstecken sich nunmal ganze Zahlen.</p>
<p>Die integrale Zeichenliterale 1 (wie zu sehen ist ohne Datentypanzeigenden Zusatz) hat so lange keinen Typ, bis sie in einen bestimmten Typ gecastet wird und sei dies nur implizit.</p>
<pre><code class="language-cpp">#define abc 1 // &lt;-- Ohne Datentyp 
void f(std::string);
int main(int argc, char* argv[])
{
   f(abc);   // &lt;-- Daraus wird &quot;f(1);&quot; Die Datentyplose integrale
             // Literale(welche sowohl als int als auch als (z.B.) char oder
             // String interpretiert werden kann) wird hier in eine int-
             // konstante gecastet.
             // Bei den meisten Compilern ist es nunmal &quot;voreingestellt&quot;,
             // dass integrale konstanten ohne typanzeigenden Zusatz
             // in int-konstanten GECASTET (&lt;-- Vor dem Cast natürlich kein
             // eindeutiger int!) werden,
             // manche Leute nennen das implizitcast oO.
             // Soll heißen, überall wo während der Compilierung eine 
             // integrale Literale steht, steht intern sowas wie (int)Literale.
             // Nunja, zumindest mindest lässt sich auf diese Weise 
             // verdeutlichen worauf ich hinaus will.
             // Demnach lässt sich &quot;f(1);&quot; so LESEN, als WÜRDE
             // dort &quot;f( (int)1 );&quot; stehen

   // compilier das Programm mal mit folgenden Zeilen
   f(char(abc)); // char() zur Aushebelung des Implizit Casts

   char zeichen = abc;
   int zahl = abc;
   std::cout &lt;&lt; zeichen &lt;&lt; (char)zahl &lt;&lt; std::endl;
   std::cout &lt;&lt; (int)zeichen &lt;&lt; zahl &lt;&lt; std::endl;
   // Sollte es sich bei dir bei der 1 um ein nichtdruckbares Zeichen handeln,
   // versuch es einfach mal mit 72 oder sowas, ist garantiert was druckbares
   // drinne.

return 0;
}
</code></pre>
<p>Soll heißen, eine 1, so ganz nackt im Quellocde, ist erst dann ein Int, wenn sie während der Compilierung einen impliziten Cast erfährt, wohlgemerkt - CAST, von &quot;irgendwas&quot; in int oO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239289</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Mon, 05 Mar 2007 01:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 01:25:43 GMT]]></title><description><![CDATA[<p>Um dagegen zu halten schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>aber sooft man es dreht und wendet, beim logging kommen stets makros heraus.</p>
</blockquote>
<p>Auch nur, weil es in C++ keinen Stacktrace gibt, um die Position im Code zu ermitteln</p>
</blockquote>
<p>vor allem, weil man das loggen einigermaßen zentrall ausschalten können mag, ohne daß die parameter ausgewertet werden und funktionen aufgerufen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239291</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 05 Mar 2007 01:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 14:26:46 GMT]]></title><description><![CDATA[<p>EDIT: Is egal..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239578</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 05 Mar 2007 14:26:46 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 14:51:26 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<p>Nur weil der Compiler da mecker, heißt das doch noch lange nicht, dass eine 1 kein String sein kann.</p>
</blockquote>
<p>Sorry das ich das sage: aber was Du meinst, ist sowas von unerheblich, das glaubst du garnicht. Weil nur das Zählt, was der ISO-C++-Standard und somit jeder weitestgehend konforme Compiler dazu sagt.</p>
<p>War jetzt hart für dich, aber das mußte einfach sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239609</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 05 Mar 2007 14:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 14:59:52 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<p>Nur das &quot;Problem&quot; ist, die meisten Compiler erdreisten bzw erbarmen sich (je nachdem wie man das denn sehen möchte) eine integrale Zeichenliterale ohne typanzeigenden Zusatz so zu interpretieren, als SEI(!) diese integrale Zeichenliterale vom Typ int.</p>
</blockquote>
<p>Naja. Sie erdreisten sich, dem C++-Standard zu folgen, der das so fordert. In C sind BTW sogar Zeichenliterale wie 'H' vom Typ int.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239615</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 05 Mar 2007 14:59:52 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 16:04:44 GMT]]></title><description><![CDATA[<p>Außerdem denke ich man kann doch in literalen auch den Typ angeben oder:<br />
also so:</p>
<pre><code class="language-cpp">#define ZWEI_LONG 2L
#define ZWEI_UNSIGNED_LONG 2UL
//oder
#define (char)1
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1239670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239670</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Mon, 05 Mar 2007 16:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 16:23:59 GMT]]></title><description><![CDATA[<p>templäd schrieb:</p>
<blockquote>
<p>Außerdem denke ich man kann doch in literalen auch den Typ angeben oder:<br />
also so:</p>
<pre><code class="language-cpp">#define ZWEI_LONG 2L
#define ZWEI_UNSIGNED_LONG 2UL
//oder
#define (char)1
</code></pre>
</blockquote>
<p>^^</p>
<pre><code class="language-cpp">#define ONE_LONG 1L
#define ONE_FLOAT 1.0f
...
</code></pre>
<p>lol</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239676</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Mon, 05 Mar 2007 16:23:59 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 17:23:03 GMT]]></title><description><![CDATA[<blockquote>
<p>Sorry das ich das sage: aber was Du meinst, ist sowas von unerheblich</p>
</blockquote>
<p>Brauchst dich dafür nicht entschuldigen, schließlich ist es unerheblich ob es unerheblich ist, sprechen wir doch über das Prinzip von Zahlen als typlose Abstrakta welche erst während der compilierung gecastet werden und als was sie zuvor so alles geplant sein könnten.</p>
<blockquote>
<p>War jetzt hart für dich, aber das mußte einfach sein.</p>
</blockquote>
<p>Tu mir leid, kann ich nicht nachvollziehen, hast du irgendwas gesagt, das meinen Aussagen widerspricht?</p>
<blockquote>
<p>Naja. Sie erdreisten sich, dem C++-Standard zu folgen, der das so fordert.</p>
</blockquote>
<p>Was hast du denn dagegen, dass integrale Literale ohne typanzeigenden Zusatz von Compilern standardmäßig in int-konstanten gecastet werden?<br />
Ich hätte von den beiden angegebenen jeweiligen Extrema eher erbarmen statt erdreisten gewählt, wäre lästig ständig explizite casts für irgendwelche Tests mit Zahlen durchzuführen.</p>
<blockquote>
<p>Außerdem denke ich man kann doch in literalen auch den Typ angeben oder:</p>
</blockquote>
<p>WÄRE durchaus möglich, ja <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/1239719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239719</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Mon, 05 Mar 2007 17:23:03 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 17:33:09 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<blockquote>
<p>Naja. Sie erdreisten sich, dem C++-Standard zu folgen, der das so fordert.</p>
</blockquote>
<p>Was hast du denn dagegen, dass integrale Literale ohne typanzeigenden Zusatz von Compilern standardmäßig in int-konstanten gecastet werden?</p>
</blockquote>
<p>&quot;gecastet&quot; ist wohl das falsche Wort. Außerdem hab ich nichts dagegen, wie kommst du denn darauf? Ich habe nur deine Ausdrucksweise übernommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239728</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 05 Mar 2007 17:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to enum vs. #define on Mon, 05 Mar 2007 17:34:57 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<blockquote>
<p>Außerdem denke ich man kann doch in literalen auch den Typ angeben oder:</p>
</blockquote>
<p>WÄRE durchaus möglich, ja <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>Jetzt wirst du aber inkonsistent. Wenn du 1L einen Typ zubilligst, kannst du nicht gleichzeitig sagen, dass 1 keinen Typ hat. Beides sind auf einer Ebene einfache Zeichenfolgen im Quelltext, und auf der nächsten Ebene ein long- bzw. ein int-Literal.</p>
<p>BTW (char)1 ist kein char-Literal, sondern ein cast-Ausdruck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239731</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 05 Mar 2007 17:34:57 GMT</pubDate></item></channel></rss>