<?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[Goto?]]></title><description><![CDATA[<p>Ich würde gerne aus einer for Schleife frühzeitig rausspringen wenn er das passende gefunden hat. Nun habe ich im Internet gesucht und haben den <strong>goto</strong> Befehl gefunden. Aber es steht oft man sollte den nicht benutzen.<br />
Was meint ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326255/goto</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 06:20:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326255.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Jun 2014 11:36:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 11:36:10 GMT]]></title><description><![CDATA[<p>Ich würde gerne aus einer for Schleife frühzeitig rausspringen wenn er das passende gefunden hat. Nun habe ich im Internet gesucht und haben den <strong>goto</strong> Befehl gefunden. Aber es steht oft man sollte den nicht benutzen.<br />
Was meint ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403095</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Mon, 09 Jun 2014 11:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 11:45:13 GMT]]></title><description><![CDATA[<p>Dafür gibt es break.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403097</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 09 Jun 2014 11:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 11:45:55 GMT]]></title><description><![CDATA[<p>Ich meine, dass break genau dafür erfunden wurde. Oder vielleicht noch besser return.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403098</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Mon, 09 Jun 2014 11:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 12:00:13 GMT]]></title><description><![CDATA[<p>Es heißt, Goto sei böse, aber man benutzt es aus Effizienzgründen immer noch bei der Kernelprogrammierung. Siehe Linux-Kernel.</p>
<p>L. G.,<br />
IBV</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403102</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 09 Jun 2014 12:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 12:17:46 GMT]]></title><description><![CDATA[<blockquote>
<p>Oder vielleicht noch besser return.</p>
</blockquote>
<p>Nein, das ist eine furchtbare Idee. Immer <code>break</code> . Ich bin mir hundert prozentig sicher dass mir volkard hier zustimmt.</p>
<p>IBV schrieb:</p>
<blockquote>
<p>Es heißt, Goto sei böse, aber man benutzt es aus Effizienzgründen immer noch bei der Kernelprogrammierung.</p>
</blockquote>
<blockquote>
<p>Das Böse-sein ist ein Hinweis an Anfänger, ein Feature nicht zu verwenden bevor man nicht genau seine Fallen kennt.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2403104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403104</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 09 Jun 2014 12:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 13:32:41 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Immer <code>break</code> . Ich bin mir hundert prozentig sicher dass mir volkard hier zustimmt.</p>
</blockquote>
<p>Also bei meheren verschachtelten for-Schleifen kann es mit break aber auch ganz schön nervig und unübersichtlich werden:</p>
<pre><code>bool flag_2_loop = false, flag_3_loop = false;
for (size_t i = 0; i &lt; 10; i++) {
	for (size_t j = 0; j &lt; 10; j++) {
		for (size_t k = 0; k &lt; 10; k++) {
			if (i + j + k == 25) {
				flag_3_loop = true;
				break;
			}
		}
		if (flag_3_loop) {
			flag_2_loop = true;
			break;
		}
	}
	if (flag_2_loop) {
		break;
	}
}
</code></pre>
<p>vs:</p>
<pre><code>for (size_t i = 0; i &lt; 10; i++) {
	for (size_t j = 0; j &lt; 10; j++) {
		for (size_t k = 0; k &lt; 10; k++) {
			if (i + j + k == 25) {
				goto end_of_loop;
			}
		}
	}
}
end_of_loop:
</code></pre>
<p>Leider kann man bei nem break ja nicht mit angeben aus wievielen Schleifen er rausspringen soll. Sowas wie <code>break(3);</code> oder so wäre hier vielleicht ganz cool?</p>
<p>Zumindest hatte ich dieses Problem schon öfters und habs immer mit flags gelöst um ja das <code>goto</code> zu vermeiden, das macht die Schleifen aber schon sehr häßlich und vermutlich auch etwas ineffizienter da ja in jedem Durchgang das Flag gecheckt werden muss...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403111</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Mon, 09 Jun 2014 13:32:41 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 13:44:45 GMT]]></title><description><![CDATA[<p>So viele Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich habe das nun mit <strong>break;</strong> gelöst. Und die finger lasse ich dann von <strong>goto</strong> auch, aber warum gibt es dann das überhaupt nocht? Weil ich finde es eig. ja ganz praktisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403113</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Mon, 09 Jun 2014 13:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 13:46:26 GMT]]></title><description><![CDATA[<p>Zum einen ist der Kernel in C geschrieben, nicht in C++, und zum anderen ist das auch eher ein Artefakt des Umstandes, dass die Coding Guidelines vor 20 Jahren geschrieben wurden, als der Effizienzgrund noch griff -- das hat sich durch optimierende Compiler seit langer Zeit erledigt.</p>
<p>Außerdem benutzt man es auch da nur zur Fehlerbehandlung und nicht, um aus Schleifen auszubrechen; das wird da als eine Art Exception-Ersatz ge- bzw. missbraucht. In C++ gibt es bessere Mittel (RAII und Exceptions), und auch in C ist das ein Ansatz, der sich zum Beispiel angesichts der Kaskade von goto fail-Bugs in diversen SSL-Implementationen in letzter Zeit aus meiner Sicht nicht so richtig bewährt hat. Lieber noch ne Funktion einziehen und bei Performancebedenken static inline davorschreiben; der Compiler regelt das schon.</p>
<p>Was das Ausbrechen aus Schleifen angeht: Mindestens kann man in allen Schleifen *ein* Flag prüfen, man braucht nicht mehrere, die gleichzeitig den Wert wechseln. Es ist mir aber auch noch nie passiert, dass ich geschachtelte Schleifen hatte, ohne dass sich eine logische Trennung in ein oder mehrere eigene Funktionen aufdrängte. Im Zweifel schreibe ich etwas in dieser Art:</p>
<pre><code class="language-cpp">template&lt;typename T, std::size_t X, std::size_t Y, std::size_t Z&gt;
T *find_3d(T (&amp;haystack)[X][Y][Z], T const &amp;needle) {
  for(std::size_t i = 0; i &lt; X; ++i) {
    for(std::size_t j = 0; j &lt; Y; ++j) {
      for(std::size_t k = 0; k &lt; Z; ++k) {
        if(haystack[i][j][k] == needle) {
          return &amp;haystack[i][j][k];
        }
      }
    }
  }

  return nullptr;
}
</code></pre>
<p>...das ist jetzt ein sehr simplistisches und nicht besonders realitätsnahes Beispiel, aber es verdeutlicht hoffentlich das Prinzip. Wenn man die Schleife unbedingt lokal haben will, kann man da ein Lambda drumschustern, aber erfahrungsgemäß sieht der Code gleich viel übersichtlicher aus, wenn man ihn entlang solcher Linien aufteilt. Und mit dem Lambda-Trick kämen wir in den Graubereich der Frage, welcher Hack weniger dreckig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403114</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 09 Jun 2014 13:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 13:49:50 GMT]]></title><description><![CDATA[<p>IBV schrieb:</p>
<blockquote>
<p>Es heißt, Goto sei böse, aber man benutzt es aus Effizienzgründen immer noch bei der Kernelprogrammierung. Siehe Linux-Kernel.<br />
L. G.,<br />
IBV</p>
</blockquote>
<p>Falsches Forum. In C (also auch im Kernel) braucht man break. In C++ würde ich das nicht so behaupten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403115</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 09 Jun 2014 13:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 13:52:30 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>Oder vielleicht noch besser return.</p>
</blockquote>
<p>Nein, das ist eine furchtbare Idee. Immer <code>break</code> . Ich bin mir hundert prozentig sicher dass mir volkard hier zustimmt.</p>
</blockquote>
<p>100% falsch!<br />
In C++ ist return viel viel toller als break.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403117</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 09 Jun 2014 13:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 13:55:18 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>Oder vielleicht noch besser return.</p>
</blockquote>
<p>Nein, das ist eine furchtbare Idee. Immer <code>break</code> . Ich bin mir hundert prozentig sicher dass mir volkard hier zustimmt.</p>
</blockquote>
<p>100% falsch!<br />
In C++ ist return viel viel toller als break.</p>
</blockquote>
<p>Was!?</p>
<p>Du willst mir erzählen,</p>
<pre><code>void foo()
{
    Schleife
        If DasundDas
            return;
}
</code></pre>
<p>Ist besser als</p>
<pre><code>void foo()
{
    Schleife
        If DasundDas
            break;
}
</code></pre>
<p>? Das ist nämlich was ich meine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403118</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 09 Jun 2014 13:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 14:16:07 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Was!?</p>
</blockquote>
<p>Break und return haben eine ganz andere Bedeutung. return heißt, dass die Aufgabe hier abgeschlossen ist und die Funktion den Wert (kann auch void sein) zurückgibt.<br />
break hingegen ist nichts anderes als ein eingeschränktes goto. Meistens braucht man es in C als zusätzliche Abbruchbedingung, wenn man z.B. etwas sucht. In C++ hat man dank templates aber high-order-functions und kann mit find_if, equals, any_of oder eigenen Funktionen arbeiten, die intern mit return beenden.<br />
Ich verwende break eigentlich nur dann, wenn sich der Aufwand für einen iterator nicht lohnt oder ich fremden Code einbauen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403122</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Mon, 09 Jun 2014 14:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 14:19:35 GMT]]></title><description><![CDATA[<blockquote>
<p>Break und return haben eine ganz andere Bedeutung. return heißt, dass die Aufgabe hier abgeschlossen ist und die Funktion den Wert (kann auch void sein) zurückgibt.</p>
</blockquote>
<p>Na genau das meine ich doch! Warum soll <code>return</code> hier pauschal besser sein (nach SG1' Zitat)? Um Schleifen abzubrechen nimmt man break. Auch wenn danach die Prozedur beendet ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403124</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 09 Jun 2014 14:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 15:56:02 GMT]]></title><description><![CDATA[<p>Wie schon geschrieben hilft ein break bei doppelten Schleifen nicht - dann lieber kurze Funktionen und ein return verwenden.<br />
Häufig will man ja dann auch unterschiedliche Rückgabewerte haben (z.B. true oder false oder bei einer Suchschleife den gefunden Wert bzw. einen Defaultwert) - auch wenn man solche Schleifen wohl gegen eine Algorithmus-Funktion austauschen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403137</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 09 Jun 2014 15:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 19:02:16 GMT]]></title><description><![CDATA[<p>zum Entkommen aus mehrfach geschachtelten Schleifen kann man die betreffenden Lauf-Variablen so setzen, daß die Schleifenbedingung nicht mehr erfüllt ist. Also bspw</p>
<p>i = foo; j = bar;</p>
<p>zum Entkommen aus dem Inneren von</p>
<p>for(i = 0; i &lt; foo; ++i){ for(j = 0; j &lt; bar; ++j){ ... } }</p>
<p>Ob das schön ist, sei mal dahingestellt <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/2403165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403165</guid><dc:creator><![CDATA[großbuchstaben]]></dc:creator><pubDate>Mon, 09 Jun 2014 19:02:16 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Mon, 09 Jun 2014 21:20:02 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>Break und return haben eine ganz andere Bedeutung. return heißt, dass die Aufgabe hier abgeschlossen ist und die Funktion den Wert (kann auch void sein) zurückgibt.</p>
</blockquote>
<p>Na genau das meine ich doch! Warum soll <code>return</code> hier pauschal besser sein (nach SG1' Zitat)? Um Schleifen abzubrechen nimmt man break. Auch wenn danach die Prozedur beendet ist.</p>
</blockquote>
<p>Richtig. Man nimmt das, was man ausdrücken möchte.</p>
<p>Nur würde ich sagen dass man, in einem Fall wo man wirklich 1:1 <code>return</code> gegen <code>break</code> austauschen kann, normalerweise auch &quot;Funktion fertig&quot; ausdrücken möchte und nicht &quot;Schleife fertig&quot;.<br />
Weil das <code>return</code> dabei normalerweise innerhalb eines <code>if</code> steht, dessen Bedingung dem &quot;fertig sein mit der Funktion&quot; entspricht.</p>
<p>ps: Meist hat man sowieso auch noch Returnwerte. Und in dem Fall finde ich <code>break</code> sowieso furchtbar, weil sehr umständlich.<br />
Vergleiche</p>
<pre><code class="language-cpp">int FindFooIndex(int foo)
{
    int index = -1; // Not found
    for (...)
    {
        if (...)
        {
            index = ...;
            break;
        }
    }
    return index;
}

// vs.

int FindFooIndex(int foo)
{
    for (...)
        if (...)
            return ...;

    return -1; // Not found
}
</code></pre>
<p>Oder gar</p>
<pre><code class="language-cpp">int GetFooBar(int foo)
{
    bool found = false;
    int bar;
    for (...)
    {
        if (...)
        {
            bar = ...;
            found = true;
            break; // Könnte man in diesem Beispiel auch als &quot;&amp;&amp; !found&quot; in die Laufbedingung verschieben
        }
    }
    if (found)
        return bar;
    else
        throw ...;
}

// vs.

int GetFooBar(int foo)
{
    for (...)
        if (...)
            return ...;

    throw ...;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2403184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403184</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 09 Jun 2014 21:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Tue, 10 Jun 2014 23:15:23 GMT]]></title><description><![CDATA[<p>großbuchstaben schrieb:</p>
<blockquote>
<p>zum Entkommen aus mehrfach geschachtelten Schleifen kann man die betreffenden Lauf-Variablen so setzen, daß die Schleifenbedingung nicht mehr erfüllt ist.</p>
</blockquote>
<p>Brr. So einen Hirnfick wie Laufvariablen verändern, nur um ein Goto zu vermeiden? Ich dachte der Grund für die Ablehnung von Goto läge in dessen Potenzial, zum Schreiben schwer nachvollziehbaren Codes verwendet zu werden. Ein &quot;goto out&quot; ist aber doch erfrischend klar, verglichen mit künstlichen Flags oder gar Rumgefummel an den Schleifenzählern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403399</guid><dc:creator><![CDATA[goto *(&amp;amp;&amp;amp;label + ]]></dc:creator><pubDate>Tue, 10 Jun 2014 23:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Tue, 10 Jun 2014 23:50:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3371">@goto</a> *(&amp;&amp;label +<br />
Bin grundsätzlich ganz deiner Meinung.</p>
<p>Bis auf das kleine Detail, dass ich in den letzten 5~10 Jahren weder <code>goto</code> noch <code>goto</code> -Umgehung durch Verändern von Laufvariablen gebraucht habe.<br />
(Und natürlich auch sonst keine schmutzigen Tricks wie Exceptions zu werfen o.ä.)</p>
<p>Alle Fälle wo man das eine oder andere zu brauchen meinen könnte, haben sich anders (mMn. &quot;schöner&quot;/&quot;eleganter&quot;) lösen lassen. Meist durch das Rausziehen der verschachtelten Schleifen in eine eigene Funktion, so dass man dann <code>return</code> als &quot;multi break&quot; verwenden kann.<br />
Manchmal auch durch das &quot;Zerteilen&quot; der verschachtelten Schleifen in mehrere Funktionen die dann jeweils nur mehr eine der Schleifen enthalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403400</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 Jun 2014 23:50:30 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Wed, 11 Jun 2014 11:54:41 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>In C++ ist return viel viel toller als break.</p>
</blockquote>
<p>Einwand: return verlässt sofort die aktuelle Funktion. Man kann bei verschachtelten Schleifen dann in der Funktion nicht fortfahren. Vielleicht doch besser mit break.</p>
<p>Hier ein Beispiel in C# (düfte in C++ geringfügig anders aussehen)</p>
<pre><code>private void Form1_Load(object sender, EventArgs e)
  {
      int  i=0, j=0, k=0;
      bool exit = false;

      for (i = 0; i &lt; 50; i++)
      {
          if (exit) break;
          for (j = 0; j &lt; 50; j++)
          {
               if (exit) break;
               for (k = 0; k &lt; 50; k++)
               {
               // Abbruch einer verschachtelten Schleife
                  if ((i==6) &amp; (j==3) &amp; (k == 10))
                  {
                      exit = true;
                      i--;
                      j--;
                      break;
                      //return;
                  }
               }
           }
      }
      // mit return kommt man hier überhaupt nicht hin!
      // mit break kann man hier aber nach dem Abbruch weiterarbeiten!
      MessageBox.Show(&quot;exit    &quot; + exit.ToString() +    // TRUE
                      &quot;\ni         &quot; + i.ToString() +   // 6
                      &quot;\nj         &quot; + j.ToString() +   // 3
                      &quot;\nk         &quot; + k.ToString());   // 10 
   }
</code></pre>
<p>Geht doch allein mit break! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> GOTO ist in jedem Fall mega out! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2403455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403455</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Wed, 11 Jun 2014 11:54:41 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Wed, 11 Jun 2014 12:11:30 GMT]]></title><description><![CDATA[<p>Geht auch gut mit return</p>
<pre><code>void xXx::Form1_Load(object &amp; sender, EventArgs &amp; e)
{
	int  i=0, j=0, k=0;

	auto lmbd = [&amp;]()
	{
		for (i = 0; i &lt; 50; i++)
		{
			for (j = 0; j &lt; 50; j++)
			{

				for (k = 0; k &lt; 50; k++)
				{
					// Abbruch einer verschachtelten Schleife
					if ((i==6) &amp; (j==3) &amp; (k == 10))
					{
						return;
					}
				}
			}
		}
	}();

	// mit return kommt man hier sehr gut  hin!
	// und man kann hier auch nach dem Abbruch weiterarbeiten!
	MessageBox.Show(&quot;exit    &quot; + exit.ToString() +    // TRUE
	&quot;\ni         &quot; + i.ToString() +   // 6
	&quot;\nj         &quot; + j.ToString() +   // 3
	&quot;\nk         &quot; + k.ToString());   // 10
}
</code></pre>
<p>(Wenn man den Code mal dümmlich als C++ ansieht, aber ich denekd as Prinzip sollte klar sein...)</p>
<p>PS: Das mit dem Break nach dem if, dass da nicht die Zeile umgebrochen ist: Das ist ne Todsünde. Mindestens genauso wie mein return 0x0; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Trollololol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403457</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 11 Jun 2014 12:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Goto? on Wed, 11 Jun 2014 12:25:44 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>In C++ ist return viel viel toller als break.</p>
</blockquote>
<p>Einwand: return verlässt sofort die aktuelle Funktion. Man kann bei verschachtelten Schleifen dann in der Funktion nicht fortfahren. Vielleicht doch besser mit break.</p>
<p>Hier ein Beispiel in C# (düfte in C++ geringfügig anders aussehen)</p>
</blockquote>
<p>Wenn Du die Berechnungen nicht auslagerst, sondern alles in die Button-Handler schmierst, hilft return natürlich wenig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403461</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 11 Jun 2014 12:25:44 GMT</pubDate></item></channel></rss>