<?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[switch + goto (bzw. utf8)]]></title><description><![CDATA[<p>das thema gabs imho schon mal, aber ich habs nicht mehr gefunden. (imho waren wir damals auch dabei geblieben, dass es keine sinnvolle alternative gibt)<br />
und zwar geht es um ein switch, was so in etwa aufgebaut ist:</p>
<pre><code class="language-cpp">int x;
x = 2 /*0..4*/;

switch(x)
{
  case 1:
    foo1();
    break;
  case 2:
    foo2();
    goto one_left;
  case 3:
    foo3();
    goto two_left;
  case 4:
    foo4();
    goto three_left;

  three_left:
    bar(a);
  two_left:
    bar(b);
  one_left:
    bar(c);
}
</code></pre>
<p>meine erste frage sollte offensichtlich sein: gibt es einen besseren weg, der euch einfällt? (mir würden alternativen einfallen, aber keine, die den quellcode nicht schlechter zu lesen macht und erst recht keine ohne zusätzliche schleifen oder alternativen)</p>
<p>meine zweite frage: auf was muss man bei der namensgebung der labels aufpassen?<br />
sind die vll so gar über die fkt hinaus sichtbar und ich muss deshalb bei der namensgebung aufpassen?<br />
oder gelten die nur in der fkt.?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254682/switch-goto-bzw-utf8</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 20:13:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254682.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Nov 2009 16:46:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sun, 22 Nov 2009 16:06:27 GMT]]></title><description><![CDATA[<p>das thema gabs imho schon mal, aber ich habs nicht mehr gefunden. (imho waren wir damals auch dabei geblieben, dass es keine sinnvolle alternative gibt)<br />
und zwar geht es um ein switch, was so in etwa aufgebaut ist:</p>
<pre><code class="language-cpp">int x;
x = 2 /*0..4*/;

switch(x)
{
  case 1:
    foo1();
    break;
  case 2:
    foo2();
    goto one_left;
  case 3:
    foo3();
    goto two_left;
  case 4:
    foo4();
    goto three_left;

  three_left:
    bar(a);
  two_left:
    bar(b);
  one_left:
    bar(c);
}
</code></pre>
<p>meine erste frage sollte offensichtlich sein: gibt es einen besseren weg, der euch einfällt? (mir würden alternativen einfallen, aber keine, die den quellcode nicht schlechter zu lesen macht und erst recht keine ohne zusätzliche schleifen oder alternativen)</p>
<p>meine zweite frage: auf was muss man bei der namensgebung der labels aufpassen?<br />
sind die vll so gar über die fkt hinaus sichtbar und ich muss deshalb bei der namensgebung aufpassen?<br />
oder gelten die nur in der fkt.?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810521</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 22 Nov 2009 16:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 17:03:45 GMT]]></title><description><![CDATA[<p>Der Code ist Murks! Mit goto konnte und kann man riesigen undurchschauhbaren Blödsinn erzeugen. Das goto wurde nur beibehalten, weil in einigen wenigen Fällen - z.B. bei einer Iteration - es noch Sinn machen kann. Aber bitte nie in einem switch! Und wenn man goto gebraucht, dann immer sehr gut kommentieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810531</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Thu, 19 Nov 2009 17:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 17:11:56 GMT]]></title><description><![CDATA[<p>Sehr hilfreich, berniebutt...</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>meine erste frage sollte offensichtlich sein: gibt es einen besseren weg, der euch einfällt?</p>
</blockquote>
<p>Wie findest du das:</p>
<pre><code>int x;
int left = 0;
x = 2 /*0..4*/;

switch(x)
{
  case 1:
    foo1();
    break;
  case 2:
    foo2();
    left = 1;
    break;
  case 3:
    foo3();
    left = 2;
    break;
  case 4:
    foo4();
    left = 3;
} 
if(left &gt; 2)
  bar(a);
if(left &gt; 1)
  bar(b);
if(left &gt; 0)
  bar(c);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1810537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810537</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 19 Nov 2009 17:11:56 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 17:26:12 GMT]]></title><description><![CDATA[<p>Also ich finde es schlechter lesbar... Wieso soll ich noch Hilfsvariablen anlegen und noch 3 if`s bauen, obwohl es auch einfacher geht?<br />
Schneller ist es auch auf gar keinen Fall, weniger Zeilen sind es auch nicht... Also (in meinen Augen) nicht mal nen Pseudo-Vorteil ggnüber der label-Variante</p>
<p>Mir ist bewusst, dass das hier vermutlich nicht ganz objektiv zu beantworten ist - das man goto nach Möglichkeit vermeiden sollte, wollte ich auch nicht anzweifeln.</p>
<p>bb</p>
<p>@bernie:<br />
<em>&quot;undurchschauhbar&quot;</em> ist nur deine Rechtschreibung<br />
<em>&quot;weil in einigen wenigen Fällen - z.B. bei einer Iteration - es noch Sinn machen kann&quot;</em> -&gt; <em>&quot;weil [es] in einigen wenigen Fällen [...] noch Sinn machen kann&quot;</em> - ganz genau das frag ich doch gerade...<br />
<em>&quot;Aber bitte nie in einem switch!&quot;</em> Grund?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810541</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 19 Nov 2009 17:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 17:44:03 GMT]]></title><description><![CDATA[<p>Naja, Performance-technisch wird die goto-Variante sowieso die schnellste sein.<br />
Aber lesbarer kriegt man das doch auf jeden Fall, in dem man meins z.B. in eine Funktion auslagert:</p>
<pre><code class="language-cpp">...
void barLeft(int left)
{
  if(left &gt; 2)
    bar(a);
  if(left &gt; 1)
    bar(b);
  if(left &gt; 0)
    bar(c); 
}
...
int x;
x = 2 /*0..4*/;

switch(x)
{
  case 1:
    foo1();
    break;
  case 2:
    foo2();
    barLeft(1);
    break;
  case 3:
    foo3();
    barLeft(2);
    break;
  case 4:
    foo4();
    barLeft(3);
    break;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1810547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810547</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 19 Nov 2009 17:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 17:56:43 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int x;
x = 2 /*0..4*/;

switch(x)
{
  case 1:
    foo1();
    break;
  case 2:
    foo2();
    bar(c);
    break;
  case 3:
    foo3();
    bar(b);
    bar(c);
    break;
  case 4:
    foo4();
    bar(1);
    bar(b);
    bar(c);
    break;
}
</code></pre>
</blockquote>
<p>Trotzdem hier die Regel &quot;Don't repeat yourself&quot; gebrochen wird würde ich diese Variante eher noch bevorzugen weil die Lesbarkeit im Vergleich zu den anderen Varianten deutlich besser ist. Die erste Variante von unskilled ist ausgesprochen &quot;obsfucated&quot; weil hier case-fallthrough und goto kombiniert benutzt werden -&gt; beides wird als &quot;bad ideas&quot; betrachtet.</p>
<p>Die Variante von Jockelx mit der zusätzlichen FUnktion ist ebenfalls besser, eben weil sie sowohl auf fallthrough als auch auf goto verzichtet. Dafür ist die Funktion falsch, weil die drei ifs ein anderes verhalten erzeugen als die gotos im Original.</p>
<p>Jockelx schrieb:</p>
<blockquote>
<p>Naja, Performance-technisch wird die goto-Variante sowieso die schnellste sein.</p>
</blockquote>
<p>-&gt; Premature Optimizing... dont do it. Die goto-variante kann der COmpiler nicht inlinen, die Funktion-Variante schon. Ich würde daher nicht drauf wetten das die goto Variante schneller sei <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/1810552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810552</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Thu, 19 Nov 2009 17:56:43 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 18:04:04 GMT]]></title><description><![CDATA[<p>so könnte man es auch ganz aus dem switch rausnehmen <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>
<p>so hatte ichs ja auch alles schon - aber besser gefallen tuts mir immer noch nicht^^</p>
<p>@loks:<br />
naja - mir wäre keine code-duplikation ja fast ein wenig wichtiger - aber <em>&quot;Die erste Variante von unskilled ist ausgesprochen &quot;obsfucated&quot; weil hier case-fallthrough und goto kombiniert benutzt werden -&gt; beides wird als &quot;bad ideas&quot; betrachtet.&quot;</em> hab ich zwar noch nicht gehört aber klingt so, als ob du wüsstest, wovon du redest ;o)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810554</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 19 Nov 2009 18:04:04 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 19:19:43 GMT]]></title><description><![CDATA[<p>Tatsächlich hab ich bei näherem Drüberlesen Unsinn geschrieben. Da sind keine fallthroughs. Andererseits ein Grund mehr für meine obsfucation-Behauptung wenn man mehrfach genau hingucken muß bis man den Code ganz versteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810606</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Thu, 19 Nov 2009 19:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 19:33:17 GMT]]></title><description><![CDATA[<p>Also ich verstehe den Sinn auch nicht ganz. Vielleicht hast du ja einfach ein blödes Beispiel genommen.<br />
Ich würde hier einfach die foo's und bar's trennen oder zumindest umdrehen.<br />
Sprich z.B bar mit den Parametern aufrufen und dann dort drin die Untescheidung mit switch/case machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810619</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 19 Nov 2009 19:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Thu, 19 Nov 2009 19:53:57 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Also ich verstehe den Sinn auch nicht ganz. Vielleicht hast du ja einfach ein blödes Beispiel genommen.<br />
Ich würde hier einfach die foo's und bar's trennen oder zumindest umdrehen.<br />
Sprich z.B bar mit den Parametern aufrufen und dann dort drin die Untescheidung mit switch/case machen.</p>
</blockquote>
<p>ja, kann schon sein, dass das bsp. an sich bissl doof war, aber ich habs jz einfach mit ner zusätzlichen schleife gelöst - wird der compiler schon wegoptimieren können ;o) und wenn nicht, dann ist das eben so^^<br />
das mit dem nicht inlinen können klang für mich schlimmer ;o)</p>
<p>die möglichkeit, doppelten code zu nehmen hatte ich relativ schnell wieder verworfen - mir war dann auch wieder eingefallen, wieso ich die schonmal als doof eingeschätzt hatte <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=";D"
      alt="😉"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810642</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 19 Nov 2009 19:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 09:29:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a> --&gt; Deine Rückfragen<br />
Also: In früheren Zeiten war die Benutzung von 'goto' weitverbreitet. Die ersten BASIC-Compiler kannten nicht viel mehr zur Ablaufkontrolle. Hiermit wurde oft sog. Spaghetti-Code erzeugt mit wilden Sprüngen kreuz und quer. Solche Programme waren unübersichtlich und im Fehlerfall schwer nachvollziehbar gewesen. Deshalb gab es in den 1980er Jahren eine Kampagne gegen das 'goto'.Für gewöhnliche Iterationen nimmt man heute besser while-Schleifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810857</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Fri, 20 Nov 2009 09:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 10:17:11 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a> --&gt; Deine Rückfragen<br />
Also: In früheren Zeiten war die Benutzung von 'goto' weitverbreitet. Die ersten BASIC-Compiler kannten nicht viel mehr zur Ablaufkontrolle. Hiermit wurde oft sog. Spaghetti-Code erzeugt mit wilden Sprüngen kreuz und quer. Solche Programme waren unübersichtlich und im Fehlerfall schwer nachvollziehbar gewesen. Deshalb gab es in den 1980er Jahren eine Kampagne gegen das 'goto'.Für gewöhnliche Iterationen nimmt man heute besser while-Schleifen.</p>
</blockquote>
<p>Die Basic-Compiler waren damals üblicherweise Basic-Interpreter.<br />
Und Aussagen wie &quot;tue etwas nie&quot; oder &quot;tue etwas stets&quot; sind irgendwie mit Vorsicht zu genießen. Es gibt durchaus ein paar Fälle, wo goto sinnvoll ist und die Übersichtlichkeit steigert. Zum Verlassen von tief geschachtelten Schleifen z.B. (sofern die Sprache nicht sowas wie exit LABEL hat, aber das ist schließlich auch nur ein besseres goto).<br />
Bei dem Teil von unskilled würde ich goto allerdings vermutlich auch nicht benutzen. Vielleicht kann man da etwas mit Funktionsüberladung basteln, dass etwas wartbarer ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810889</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 20 Nov 2009 10:17:11 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 10:24:27 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Deshalb gab es in den 1980er Jahren eine Kampagne gegen das 'goto'.</p>
</blockquote>
<p>Kurzfassung:<br />
1968: Go To Statement Considered Harmful <a href="http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF" rel="nofollow">http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF</a><br />
über<br />
1978: With quält die Welt mit Modula II <a href="http://de.wikipedia.org/wiki/Modula-2" rel="nofollow">http://de.wikipedia.org/wiki/Modula-2</a><br />
bis<br />
1991: Qbasic verdängt goto-erzwingende Basic-Dialekte <a href="http://de.wikipedia.org/wiki/QBasic" rel="nofollow">http://de.wikipedia.org/wiki/QBasic</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810893</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 20 Nov 2009 10:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 13:48:57 GMT]]></title><description><![CDATA[<p>Ich hatte dieses Problem neulich auch öfters (beim Umbau eines alten Codes).<br />
Da es eben öfters auftrat, habe ich mich für ein zweites Switch entschieden und dieses Verfahren an allen Stellen angewandt.<br />
Sieht insgesamt feiner aus, als es hier im ersten Moment erscheint.</p>
<pre><code>int x;
int xtype;

x = 2 /*0..4*/;

switch (x)
{
  case 1: foo1(); xtype = 0; break;
  case 2: foo2(); xtype = 1; break;
  case 3: foo3(); xtype = 2; break;
  case 4: foo4(); xtype = 3; break;
}

switch (xtype)
{
  case 3:
    bar(a);
  case 2:
    bar(b);
  case 1:
    bar(c);
}
</code></pre>
<p>Eigentlich würde ich auch einen extra Funktionsaufruf bevorzugen, aber in diesem Fall kam es mir darauf an, dass keine neuen Funktionen entstehen, sondern alles in genau dem Rahmen abgehandelt wird, in dem es original vorlag.</p>
<p>Prinzipiell könnte 'xtype' sogar x selbst sein, aber ich wollte die Möglichkeit einer Änderung des x im ersten switch offen halten.</p>
<p>Wird eine richtige Enumerierung eingesetzt, sieht's noch sauberer aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810985</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Fri, 20 Nov 2009 13:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 18:10:12 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>meine erste frage sollte offensichtlich sein: gibt es einen besseren weg, der euch einfällt?</p>
</blockquote>
<p>switch ist eines der überflüssigsten Sprachkonstrukte in C++. Fast immer ist es sinnvoller was anderes zu nehmen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main () {
    int x(4); // 0..4

    switch(x) {
    case 1:
        break;
    case 2:
        goto one_left;
    case 3:
        goto two_left;
    case 4:
        goto three_left;

    three_left:
        std::cout &lt;&lt; &quot;three_left\n&quot;;
    two_left:
        std::cout &lt;&lt; &quot;two_left\n&quot;;
    one_left:
        std::cout &lt;&lt; &quot;one_left\n&quot;;
    }
    std::cout &lt;&lt; &quot;end of switch\n\n&quot;;

    if (1 &lt; x) {
        if (2 &lt; x) {
            if (3 &lt; x) {
                std::cout &lt;&lt; &quot;three_left\n&quot;;
            }
            std::cout &lt;&lt; &quot;two_left\n&quot;;
        }
        std::cout &lt;&lt; &quot;one_left\n&quot;;
    }
    std::cout &lt;&lt; &quot;end of switch\n&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1811138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811138</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Fri, 20 Nov 2009 18:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 20:23:14 GMT]]></title><description><![CDATA[<p>~john hier vergleichst du aber äpfel mit birnen...</p>
<pre><code class="language-cpp">if (1 &lt; x) {
        if (2 &lt; x) {
            if (3 &lt; x) {
                std::cout &lt;&lt; &quot;three_left\n&quot;;
            }
            std::cout &lt;&lt; &quot;two_left\n&quot;;
        }
        std::cout &lt;&lt; &quot;one_left\n&quot;;
    }
    std::cout &lt;&lt; &quot;end of switch\n&quot;;
</code></pre>
<p>vs.</p>
<pre><code class="language-cpp">switch(x)
{
  case 3:    std::cout &lt;&lt; &quot;three_left\n&quot;;
  case 2:    std::cout &lt;&lt; &quot;two_left\n&quot;;
  case 1:    std::cout &lt;&lt; &quot;one_left\n&quot;;
}
std::cout &lt;&lt; &quot;end of switch\n&quot;;
</code></pre>
<p>noch dazu müsste es in deinem code <code>if(x == 3)</code> heißen und nicht <code>if(x &gt; 3)</code> .</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811203</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 20 Nov 2009 20:23:14 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 20:51:50 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>~john hier vergleichst du aber äpfel mit birnen...</p>
<pre><code class="language-cpp">if (1 &lt; x) {
        if (2 &lt; x) {
            if (3 &lt; x) {
                std::cout &lt;&lt; &quot;three_left\n&quot;;
            }
            std::cout &lt;&lt; &quot;two_left\n&quot;;
        }
        std::cout &lt;&lt; &quot;one_left\n&quot;;
    }
    std::cout &lt;&lt; &quot;end of switch\n&quot;;
</code></pre>
<p>vs.</p>
<pre><code class="language-cpp">switch(x)
{
  case 3:    std::cout &lt;&lt; &quot;three_left\n&quot;;
  case 2:    std::cout &lt;&lt; &quot;two_left\n&quot;;
  case 1:    std::cout &lt;&lt; &quot;one_left\n&quot;;
}
std::cout &lt;&lt; &quot;end of switch\n&quot;;
</code></pre>
<p>noch dazu müsste es in deinem code <code>if(x == 3)</code> heißen und nicht <code>if(x &gt; 3)</code> .</p>
</blockquote>
<p>Geht viel schneller und einfacher.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main(){
	int x;
	cin&gt;&gt;x;
	cout&lt;&lt;&amp;x[&quot;\35\24\13&quot;][&quot;three_left\ntwo_left\none_left\nend of switch\n&quot;];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1811217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811217</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 20 Nov 2009 20:51:50 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Fri, 20 Nov 2009 20:47:33 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>meine erste frage sollte offensichtlich sein: gibt es einen besseren weg, der euch einfällt?</p>
</blockquote>
<p>Frage zu speziell. In welchem Kontext passiert das? Sind die Funktionen überhaupt sinnvoll? Ich kann nur über Verbesserungen nchdenken, wenn ich weiß, was da geschehen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811224</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 20 Nov 2009 20:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 05:21:51 GMT]]></title><description><![CDATA[<p>Da kann ich volkard zustimmen. Das Beispiel sagt nicht was du wirklich machst. Wahrscheinlich kann man es ganz anders machen, aber dazu müsste man erst mal wissen was es macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811313</guid><dc:creator><![CDATA[jobp]]></dc:creator><pubDate>Sat, 21 Nov 2009 05:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 13:52:32 GMT]]></title><description><![CDATA[<p>@Alle hier<br />
Die Diskussion bringt nichts mehr. Wir und der Fragesteller kommen da doch zur Frage &quot;Wie entwerfe ich ein übersichtlich strukturiertes, leicht nachvollziehbares und wartungsfreundliches Programm?&quot; Das ist dann ein vollkommen anderes Thema! Hier ging es um den Gebrauch von 'goto'. Und diesen sollte man wirklich nur dann einsetzen, wenn es anders unübersichtlicher bleibt. Auch ich setze gelegentlich deswegen 'goto' ein, was bei verschachtelten Schleifen sogar Sinn macht. Das lässt sich aber nur aus der konkreten Aufgabenstellung klären, die hier unbekannt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811418</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Sat, 21 Nov 2009 13:52:32 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 14:10:49 GMT]]></title><description><![CDATA[<p>ging um Zeichenkonvertierung: utf8 -&gt; ucs4.<br />
So siehts jetzt aus:</p>
<pre><code class="language-cpp">template &lt;typename InputIterator&gt;
static ucs4 get_ucs4_from_utf8(InputIterator &amp;iter, InputIterator end)
{
	unsigned char tmp = unsigned char(*iter++);
	const unsigned char length = get_length(tmp);

	switch(length)
	{
	case 1:
		return ucs4(tmp);
	case 2:
		tmp = null_first_three_bits(tmp);
		break;
	case 3:
		tmp = null_first_four_bits(tmp);
		break;
	case 4:
		tmp = null_first_five_bits(tmp);
		break;
	}

	ucs4 to_add = make_byte(tmp, --length);

	for(; length &gt;= 0; --length)
	{
		if(iter == end)
			throw std::runtime_error(&quot;wrong utf8 encoding&quot;);
		to_add = add(to_add, *iter++, length);
	}

	return to_add;
}
</code></pre>
<p>die Schleife wollte ich halt eigtl mit in das switch bauen, aber habs jetzt so gemacht, dass make_byte eben das erste byte(erster parameter) (um 2. parameter * 6) nach links shiftet und add den zweiten parameter um length*6 nach links shiftet und dann den ersten Parameter mit dem geshifteten addiert(bzw. nur nen or ausführt, weil dort ja eh noch 0en sind).<br />
wenn ich noch ma drüber nachdenke, könnte man auch wirklich nen zweites switch bauen... hmm...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811424</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 21 Nov 2009 14:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 14:50:25 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Geht viel schneller und einfacher.</p>
</blockquote>
<p>Natürlich muß man entsprechend Code einfügen und dann klappt das, was Du hier vorschlägst nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811438</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Sat, 21 Nov 2009 14:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 14:51:34 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>~john hier vergleichst du aber äpfel mit birnen...</p>
</blockquote>
<p>Du liest nicht aufmerksam, das ist alles. Es gibt <strong>exakt</strong> das gleiche Ergebnis heraus! Und natürlich muß man anstelle der sinnfreien Ausgaben entsprechende Codeblöcke einfügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811439</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Sat, 21 Nov 2009 14:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 16:11:22 GMT]]></title><description><![CDATA[<p>while ist auch komplett sinnlos, oder?</p>
<p>else ist auch total sinnlos</p>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811477</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 21 Nov 2009 16:11:22 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 16:57:37 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Hier ging es um den Gebrauch von 'goto'. Und diesen sollte man wirklich nur dann einsetzen, wenn es anders unübersichtlicher bleibt. Auch ich setze gelegentlich deswegen 'goto' ein, was bei verschachtelten Schleifen sogar Sinn macht.</p>
</blockquote>
<p>Aber die verschachtelten Schleifen machen keinen Sinn, womit das goto wieder stirbt. <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="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811491</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 21 Nov 2009 16:57:37 GMT</pubDate></item><item><title><![CDATA[Reply to switch + goto (bzw. utf8) on Sat, 21 Nov 2009 17:01:16 GMT]]></title><description><![CDATA[<p>was machen null_first_three_bits und so? den code müßte ich erst entoptimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811493</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 21 Nov 2009 17:01:16 GMT</pubDate></item></channel></rss>