<?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[If Abfrage verbessern]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe in meinem Code folgende If Abfrage(Vereinfacht):</p>
<pre><code class="language-cpp">if(a&gt;b) {
	Foo1(b);
	Foo2();
}
else if(a&lt;c) {
	Foo1(c);
	Foo2();
}
</code></pre>
<p>Das Foo2() wird ja ausgeführt, wenn (a&gt;b || a&lt;c) gilt.<br />
Kann ich das Foo2() irgendwie &quot;ausklammern&quot; ohne noch ein if einzufügen?</p>
<p>Sowas habe ich nicht so selten im Code und es würde schon ne menge Zeilen einsparen.</p>
<p>Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279708/if-abfrage-verbessern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 11:09:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279708.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Jan 2011 10:49:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to If Abfrage verbessern on Sun, 02 Jan 2011 10:49:25 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe in meinem Code folgende If Abfrage(Vereinfacht):</p>
<pre><code class="language-cpp">if(a&gt;b) {
	Foo1(b);
	Foo2();
}
else if(a&lt;c) {
	Foo1(c);
	Foo2();
}
</code></pre>
<p>Das Foo2() wird ja ausgeführt, wenn (a&gt;b || a&lt;c) gilt.<br />
Kann ich das Foo2() irgendwie &quot;ausklammern&quot; ohne noch ein if einzufügen?</p>
<p>Sowas habe ich nicht so selten im Code und es würde schon ne menge Zeilen einsparen.</p>
<p>Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001198</guid><dc:creator><![CDATA[c++ Guy]]></dc:creator><pubDate>Sun, 02 Jan 2011 10:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to If Abfrage verbessern on Sun, 02 Jan 2011 11:12:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if (a&gt;b || a&lt;c) {
    if(a&gt;b) Foo1(b);
    else    Foo1(c);
    Foo2();
}
</code></pre>
<p>Platz- und zeitoptimierter Code:</p>
<pre><code class="language-cpp">if      (a&gt;b) Foo1(a);
else if (a&lt;c) Foo1(c);
else return/break/goto mark;
Foo2();
</code></pre>
<p>Alternativ kannst du das in einem Makro verstecken (meine Vorschläge werden immer schlimmer)</p>
<pre><code class="language-cpp">#define nonelse(code)         \
        else goto makro_mark; \
        code;                 \
      makro_mark:

if (a&gt;b) {
    Foo1(b);
}
else if(a&lt;c) {
    Foo1(c);
}
nonelse(
    Foo2();
)
</code></pre>
<p>Nein, lass das lieber.</p>
<p>Wenn vieles wiederholt auftritt, dann lager das mit einer inline-Funktion aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001201</guid><dc:creator><![CDATA[guysin]]></dc:creator><pubDate>Sun, 02 Jan 2011 11:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to If Abfrage verbessern on Sun, 02 Jan 2011 12:41:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Foo1(...)
{
   ...
   Foo2();
}

if(a&gt;b) {
	Foo1(b);
}
else if(a&lt;c) {
	Foo1(c);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2001237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001237</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sun, 02 Jan 2011 12:41:48 GMT</pubDate></item><item><title><![CDATA[Reply to If Abfrage verbessern on Sun, 02 Jan 2011 14:12:32 GMT]]></title><description><![CDATA[<p>Danke für die Vorschläge. Im moment hab ich das goto im code stehen. Das Makro ist mir zu fischig.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22666">@Belli</a>:<br />
Das sieht nach der saubersten Lösung aus, aber bei mir ist Foo2() lokal gebunden, weils eine Memberfunktion einer Klasse ist. Dann müsste ich die Klasse also mit an Foo1() übergeben. Ist das Sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001285</guid><dc:creator><![CDATA[c++ Guy]]></dc:creator><pubDate>Sun, 02 Jan 2011 14:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to If Abfrage verbessern on Sun, 02 Jan 2011 15:24:39 GMT]]></title><description><![CDATA[<p>Wenn man schon auf Makros zurückgreift, kann man zumindest die goto-Fummelei sein lassen:</p>
<pre><code class="language-cpp">#define FOO1(x) { \
  Foo1(x); \
  Foo2(); \
}

if(a &gt; b) {
  FOO1(b);
} else if(a &lt; c) {
  FOO1(c);
}
</code></pre>
<p>Ansonsten sieht mir das so aus, als seien b und c Bereichsbegrenzungen. <strong>Wild geraten</strong> unter der Annahme, dass c &lt;= b:</p>
<pre><code class="language-cpp">int v = std::min(b, std::max(a, c)); // bzw. statt int betreffender Datentyp

if(v != a) {
  Foo1(v);
  Foo2();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2001325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001325</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 02 Jan 2011 15:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to If Abfrage verbessern on Sun, 02 Jan 2011 15:55:37 GMT]]></title><description><![CDATA[<p>c++ Guy schrieb:</p>
<blockquote>
<p>Das sieht nach der saubersten Lösung aus, aber bei mir ist Foo2() lokal gebunden, weils eine Memberfunktion einer Klasse ist. Dann müsste ich die Klasse also mit an Foo1() übergeben. Ist das Sinnvoll?</p>
</blockquote>
<p>pffff ... Du meinst, Du mußt das passende Objekt mitübergeben? Naja, das muß ja auch schon irgendwie in den Kontext gekommen sein, wo Du Foo2 jetzt aufrufst. Es macht natürlich nur dann Sinn, wenn anschließend an Foo1 IMMER Foo2 aufgerufen werden soll, das kann ich Deinem kleinen Code-Schnipsel nicht entnehmen. Es ist halt eine Möglichkeit, ob sie Sinn in Deinem Projekt macht, mußt Du selbst entscheiden.<br />
Wie gesagt, Du kannst dann natürlich nicht mehr (ohne weiteres) von irgendeiner Stelle Foo1 aufrufen, OHNE daß im Anschluß Foo2 aufgerufen wird ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001334</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sun, 02 Jan 2011 15:55:37 GMT</pubDate></item><item><title><![CDATA[Reply to If Abfrage verbessern on Mon, 03 Jan 2011 02:41:35 GMT]]></title><description><![CDATA[<p>c++ Guy schrieb:</p>
<blockquote>
<p>Hallo!<br />
Ich habe in meinem Code folgende If Abfrage(Vereinfacht):</p>
<pre><code class="language-cpp">if(a&gt;b) {
	Foo1(b);
	Foo2();
}
else if(a&lt;c) {
	Foo1(c);
	Foo2();
}
</code></pre>
</blockquote>
<p>Ich finde das ist von allen gezeigten Möglichkeiten immer noch die sauberste. Das einzige was man hier noch ändern könnte, wenn solche Stellen mehr als nur 1-2 mal auftreten: eine Funktion (kein Makro) machen die Foo1 und Foo2 hintereinander aufruft:</p>
<pre><code class="language-cpp">void Foo12(T x)
{
    Foo1(x);
    Foo2();
}

// ...

if(a&gt;b)
	Foo12(b);
else if(a&lt;c)
	Foo12(c);
</code></pre>
<p>Alles andere schadet IMO mehr als es hilft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001508</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 03 Jan 2011 02:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to If Abfrage verbessern on Mon, 03 Jan 2011 05:25:30 GMT]]></title><description><![CDATA[<p>c++ Guy schrieb:</p>
<blockquote>
<p>Sowas habe ich nicht so selten im Code...</p>
</blockquote>
<p>Ich nicht. Wann braucht man sowas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001517</guid><dc:creator><![CDATA[88888888888888888888888]]></dc:creator><pubDate>Mon, 03 Jan 2011 05:25:30 GMT</pubDate></item></channel></rss>