Um endlich wieder bei
weiterzumachen:Frage: Wie kriegt der Stack diesen Ablauf gebacken ?
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
Wenn sowas jetzt in Code auftaucht, ein switch ist hier nur ein BeispielCode:struct Ding { ~Ding() { Serial.printf("Fertig"); } }
Dann ist die AusgabeCode:switch(i) { case 1: { Ding a; // .... break; } case 2: /... } Serial.printf("Test");
Fertig
Test
Sowas kann auch passieren, wenn ein goto über { oder } hinwegspringt, vorwärts oder rückwärts.
- - - Aktualisiert - - -
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