Um endlich wieder bei
Frage: Wie kriegt der Stack diesen Ablauf gebacken ?
weiterzumachen:
In C++ kommt noch eine weitere Komplexität hinzu. Das ist auch der Grund, warum gotos unerwartete Nebeneffekte haben können, die man nicht gut sieht, wenn über mehrere Bildschirmseiten gesprungen wird.
Nehmen wir mal an, man verwendet Dinge aus einer Arduino Lib, hier zur Demonstration mal mit Debug-Ausgaben
Code:
struct Ding
{
~Ding()
{
Serial.printf("Fertig");
}
}
Wenn sowas jetzt in Code auftaucht, ein switch ist hier nur ein Beispiel
Code:
switch(i)
{
case 1:
{
Ding a;
// ....
break;
}
case 2:
/...
}
Serial.printf("Test");
Dann ist die Ausgabe
Fertig
Test
Sowas kann auch passieren, wenn ein goto über { oder } hinwegspringt, vorwärts oder rückwärts.
- - - Aktualisiert - - -

Zitat von
HaWe
die Frage der Zwischenwerte wird ebenfalls in deinem Link diskutiert. Es bleibt dabei:
switch/case basiert auf goto mit jump labels / jump tables und es entspricht NICHT if/ else if / else if.
Dazu reicht es einfach aus dem Link zu zitieren
...
Next, how do we jump to these calling targets?
...
The logic is not too hard to understand. ...Rewrite the snippet like this:
...
i2 = i;
if i2 > 700 goto LN14;
if i2 == 700 goto LN5;
if i2 > 250 goto LN15;
if i2 == 250 goto LN7;
if i2 == 100 goto LN9;
if i2 == 200 goto LN8;
goto LN1;
LN15:
if i2 == 500 goto LN6;
goto LN1;
LN14:
if i2 == 750 goto LN4;
if i2 == 800 goto LN3;
if i2 == 900 goto LN2;
goto LN1;
Lesezeichen