<?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[case-label]]></title><description><![CDATA[<p>Ich hab in meinem Buch gerade den Abschnitt über &quot;switch/case label&quot; durchgemacht, verstehe aber nicht, warum es ausgeführt wird, wenn ich kein break hinschreibe:</p>
<pre><code class="language-cpp">int x = 20;
     short counter = 0;

        switch (x)
        {
            case 5: //5 wird komischerweise nicht ausgeführt!?
            ++counter;
            case 20:  //x ist doch nur 20
            ++counter;
            case 15: //nicht 15!? Warum wirds ausgeführt?
            ++counter;
            case 12: //Und auch nicht 12?! warum wirds trotzdem ausgeführt?
            ++counter;
            case 13: //.....ich kann da überhaupt keine Logik entdecken...
            ++counter;
        }

    cout &lt;&lt; counter &lt;&lt; endl;
</code></pre>
<p>Ich weiß schon dass man fast immer break am ende eines case-Labels nehmen soll, aber ich verstehe den Sinn nicht. Hat jemand vll. früher auch mal diesen Denkfehler und kanns mir jetzt erklären?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235489/case-label</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 04:21:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235489.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Mar 2009 21:02:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to case-label on Mon, 02 Mar 2009 21:04:00 GMT]]></title><description><![CDATA[<p>Ich hab in meinem Buch gerade den Abschnitt über &quot;switch/case label&quot; durchgemacht, verstehe aber nicht, warum es ausgeführt wird, wenn ich kein break hinschreibe:</p>
<pre><code class="language-cpp">int x = 20;
     short counter = 0;

        switch (x)
        {
            case 5: //5 wird komischerweise nicht ausgeführt!?
            ++counter;
            case 20:  //x ist doch nur 20
            ++counter;
            case 15: //nicht 15!? Warum wirds ausgeführt?
            ++counter;
            case 12: //Und auch nicht 12?! warum wirds trotzdem ausgeführt?
            ++counter;
            case 13: //.....ich kann da überhaupt keine Logik entdecken...
            ++counter;
        }

    cout &lt;&lt; counter &lt;&lt; endl;
</code></pre>
<p>Ich weiß schon dass man fast immer break am ende eines case-Labels nehmen soll, aber ich verstehe den Sinn nicht. Hat jemand vll. früher auch mal diesen Denkfehler und kanns mir jetzt erklären?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673136</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Mon, 02 Mar 2009 21:04:00 GMT</pubDate></item><item><title><![CDATA[Reply to case-label on Mon, 02 Mar 2009 21:11:33 GMT]]></title><description><![CDATA[<p>Ohne break fällt man durch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673138</guid><dc:creator><![CDATA[gecheckt]]></dc:creator><pubDate>Mon, 02 Mar 2009 21:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to case-label on Mon, 02 Mar 2009 21:19:29 GMT]]></title><description><![CDATA[<p>Oftmals will man so etwas machen:</p>
<pre><code class="language-cpp">switch (x)
        {
            case 5:
            case 20: 
            case 15: 
               ++counter;
            break;

            case 12: 
            case 13:
              --counter;
            break;
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1673144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673144</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 02 Mar 2009 21:19:29 GMT</pubDate></item><item><title><![CDATA[Reply to case-label on Mon, 02 Mar 2009 21:31:28 GMT]]></title><description><![CDATA[<p>Ich fände es aber sinnvoller, stattdessen ein anderes Schlüsselwort zu nehmen (also &quot;break&quot; weg und stattdessen z.B. &quot;continue&quot; oder so)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673154</guid><dc:creator><![CDATA[Fast2]]></dc:creator><pubDate>Mon, 02 Mar 2009 21:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to case-label on Mon, 02 Mar 2009 21:34:34 GMT]]></title><description><![CDATA[<p>eigentlich sollte das in deinem Buch/Tutorial auch drin stehn: da x = 20 fängt die Ausführung beim entsprechenden case-Label an und <em>hört erst beim nächsten break auf oder wenn der Block zu Ende ist</em>. Den kursiven Teil hast du im Buch/Tutorial vermutlich überlesen, noch nicht gelesen, oder du solltest dir ein anderes suchen <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/1673157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673157</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 02 Mar 2009 21:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to case-label on Mon, 02 Mar 2009 23:57:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14886">@Stromberg</a>:<br />
Einige Dinge bezüglich switch() in C++ versteht man am besten, wenn man sich denkt <em>&quot;switch() ist im Prinzip genau wie goto&quot;</em>...<br />
z.B. Duff's Device bereitet mir ohne dem Vergleich mit goto ziemliche Kopfschmerzen:<br />
<a href="http://en.wikipedia.org/wiki/Duff%27s_device" rel="nofollow">http://en.wikipedia.org/wiki/Duff%27s_device</a></p>
<pre><code class="language-cpp">//switch (x)
do { // damit break funktioniert, und für den scope
if (x == 5) goto case_5;
else if (x == 10) goto case_10;
else goto default_;

// *** so wird z.B. auch klar wieso HIER (=vor dem ersten case) überhaupt code stehen kann ***
// EDIT: die einzige Möglichkeit hierherzukommen ist natürlich über einen Loop,
//       wie im Beispiel unten -- nur damit sich keiner wundert wieso man
//       hier Code herschreiben sollte /EDIT

//case 5:
case_5:
    foo();

//case 10:
case_10:
    bar();

//default:
default_:
    baz();

} while (0); // für das &quot;do&quot; oben :)
</code></pre>
<p>Beispiel (total plem, aber erlaubt):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
	bool foo = true;
	switch (1)
	{
		do { 
			foo = false;
			std::cout &lt;&lt; &quot;VOR case 0!!!\n&quot;;
		case 0:
			std::cout &lt;&lt; &quot;case 0\n&quot;;
		case 1:
			std::cout &lt;&lt; &quot;case 1\n&quot;;
		case 2:
			std::cout &lt;&lt; &quot;case 2\n&quot;;
		}
		while (foo);
	}

	std::cin.get();
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>case 1
case 2
VOR case 0!!!
case 0
case 1
case 2
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1673194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673194</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 02 Mar 2009 23:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to case-label on Tue, 03 Mar 2009 22:09:23 GMT]]></title><description><![CDATA[<p>Dann definier ich dass einfach so, wenn kein &quot;break&quot; vorhanden ist, und switch auf ein case-Label &quot;anspringt&quot;, dann werden die weiteren case-Label nicht mehr beachtet, aber ihre Ausdrücke werden trotzdem ausgeführt.</p>
<p>z.B.</p>
<pre><code class="language-cpp">int i = 16
switch(i) 
{
    case 12: //springt nicht auf 12 an
    cout &lt;&lt; &quot;12&quot; &lt;&lt; endl; //keine Ausführung
    case 14: //springt nicht auf 14 an
    cout &lt;&lt; &quot;14&quot; &lt;&lt; endl; //keine Ausführung
    case 16: //springt auf 16 an
    cout &lt;&lt; &quot;16&quot; &lt;&lt; endl;
    case 18: // wird nicht mehr beachtet
    cout &lt;&lt; &quot;18&quot; &lt;&lt; endl; //wird trotzdem ausgeführt
    case 20: //wird nicht mehr beachtet
    cout &lt;&lt; &quot;20&quot; &lt;&lt; endl; //wird trotzdem ausgeführt
}
</code></pre>
<p>Stimmt meine Definition von switch so? Oder würdet ihr noch was hinzufügen?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673771</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 03 Mar 2009 22:09:23 GMT</pubDate></item><item><title><![CDATA[Reply to case-label on Wed, 04 Mar 2009 06:23:36 GMT]]></title><description><![CDATA[<p>Das stimmt soweit, aber ich finde Du machst es Dir unnötig schwer. &quot;Die Ausführung läuft ab der angesprungenen Case-Marke <strong>bis zum break oder Ende des switch-Blocks</strong>&quot; reicht doch aus, um eine klare Aussage zu treffen. (Ergänzend &quot;...ohne weitere case-Marken zu beachten&quot; wäre nur zur Klarstellung)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673826</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 04 Mar 2009 06:23:36 GMT</pubDate></item></channel></rss>