<?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[Macros-Frage]]></title><description><![CDATA[<p>hallo. könnte mir jemand mal hier bei den macros helfen und sagen was als rückgabewert zu werwarten ist jeweils?</p>
<pre><code>1. #define F1(zahl)(zahl)&lt;0 ? -(zahl):(zahl)

2. #define F2(a, b)((a)&lt;(b) ? (a):(b))
</code></pre>
<p>weiss leide rnicht so genau wie ich das betrachten soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241530/macros-frage</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 08:14:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241530.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 May 2009 21:28:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Macros-Frage on Thu, 21 May 2009 21:28:51 GMT]]></title><description><![CDATA[<p>hallo. könnte mir jemand mal hier bei den macros helfen und sagen was als rückgabewert zu werwarten ist jeweils?</p>
<pre><code>1. #define F1(zahl)(zahl)&lt;0 ? -(zahl):(zahl)

2. #define F2(a, b)((a)&lt;(b) ? (a):(b))
</code></pre>
<p>weiss leide rnicht so genau wie ich das betrachten soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713957</guid><dc:creator><![CDATA[merchant]]></dc:creator><pubDate>Thu, 21 May 2009 21:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to Macros-Frage on Fri, 22 May 2009 01:20:36 GMT]]></title><description><![CDATA[<p>Rückgabewert? Ein Makro hat keinen Rückgabewert. Makros sind dumme Textersetzungsanweisungen. Ein Beispiel für jedes Makro:</p>
<pre><code class="language-cpp">F1(5);
// Wird ersetzt zu:
(5)&lt;0 ? -(5):(5);

F2(5, 6);
// Wird ersetzt zu:
((5)&lt;(6) ? (5):(6))
</code></pre>
<p>Was ein Conditional Operator ist, bzw. tut, wirst du wohl noch wissen, hoffe ich. Ansonsten kannst du es hier nachlesen:<br />
<a href="http://www.cplusplus.com/doc/tutorial/operators/" rel="nofollow">http://www.cplusplus.com/doc/tutorial/operators/</a></p>
<p>In C++ übrigens definitiv der falsche Einsatzbereich für Makros. Für sowas würde man in C++ ein Funktionstemplate verwenden.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713988</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 22 May 2009 01:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Macros-Frage on Fri, 22 May 2009 04:47:57 GMT]]></title><description><![CDATA[<p>Was sollen diese Makros überhaupt? Für F1 gibt es z.B. die Funktion abs bzw. fabs (absoluten Betrag bekommen), für F2 gibt es std::min.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713991</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 22 May 2009 04:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to Macros-Frage on Fri, 22 May 2009 11:54:34 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Was sollen diese Makros überhaupt? Für F1 gibt es z.B. die Funktion abs bzw. fabs (absoluten Betrag bekommen), für F2 gibt es std::min.</p>
</blockquote>
<p>keine bange, diese makros sah man oft. deswegen fragte der lehrer auch nach genau diesen makros, weil sie so oft vorkamen und noch einigermaßen sinnvoll und leicht verständlich sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714136</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 22 May 2009 11:54:34 GMT</pubDate></item><item><title><![CDATA[Reply to Macros-Frage on Sat, 23 May 2009 20:11:19 GMT]]></title><description><![CDATA[<p>[quote=&quot;merchant&quot;]</p>
<pre><code>#define F2(a, b)((a)&lt;(b) ? (a):(b))
</code></pre>
<p>Ich glaube Dein Problem ist, dass Du neben der eigentlichen Makrodefinition den &quot;bedingten Ausdruck&quot; nicht erkennst. Ein bedingter Ausdruck ist ein Konstrukt, dass wie folgt aussieht:</p>
<pre><code class="language-cpp">if(a &gt; b)
  z=a;
else
  z=b;
</code></pre>
<p>und in der folgenden Form abgekürzt werden kann:</p>
<pre><code class="language-cpp">z = (a &lt; b) ? a : b;
</code></pre>
<p>Umgangssprachlich heisst das, dass wenn der Ausdruck (a &lt; b) wahr ist, dann wird a zurückgegeben, ansonsten b.</p>
<p>Bedingte Ausdrücke sind ein Erbe der Programmierspache C und finden auch in C++ anwendung.</p>
<p>Dein spezielles Makro entspricht in C++ -wie von _matze bereit erwähnt- der Funktion im namespace std:</p>
<pre><code class="language-cpp">z = min(a,b);
</code></pre>
<p>Es ist zwar richtig, dass Dravere schreibt, dass Deine Markos keinen Rückgabetyp besitzen, aber das soll nicht heissen, dass Du das Makro nicht auf die rechte Seite einer Zuweisung setzen kannst, da der Ausdruck einen Wert hat, den Du einer Variable zuwesien kannst. Das sieht dann so aus:</p>
<pre><code class="language-cpp">int a = 5;
int b = 6;
int z = 0;
z = F2(a,b); // z ist jetzt 5
</code></pre>
<p>Warum die Klammern im Makro so gesetzt sind kannst Du in jeder guten Einführung über den C Präprozessor nachlesen. Wohlgemerkt C, da man in C++ versucht den Präprozessor mit seinen Schwächen zu vermeiden.</p>
<p>Gruß,<br />
B!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714719</guid><dc:creator><![CDATA[BitShift_]]></dc:creator><pubDate>Sat, 23 May 2009 20:11:19 GMT</pubDate></item></channel></rss>