
Zitat von
oberallgeier
Frage: Wie kriegt der Stack diesen Ablauf gebacken ?
Also erstmal sind wir hier in der Arduino Rubrik. Es gelten also die goto Regeln von C++, nicht die von C.
Zweitens, von der Implementierung her ist ein switch/case eher eine if else if Kette, kein goto.
Den Stack in Ordnung zu halten ist Sache des C++ Compilers. Was ein bischen ein Problem ist, der g++ für die 8 Bitter ist ein recht abgespeckter Compiler. Keine Ahnung, ob der wirklich alle Regeln befolgt. Auch das ist ein Grund, warum ich solche goto Konstrukte für suspekt halte.
Grundsätzlich gilt: In C++ darf man mit goto nur innerhalb einer Funktion springen und
Code:
{
Ding a;
Ding b;
goto weg;
}
bedeutet implizit, dass beim goto die Destruktoren von a und b aufgerufen werden. Und bei
Code:
goto da;
{
Ding a;
Ding b;
da:
// ... mehr Code
bedeutet das goto, dass a und b über ihre Defaultkonstruktoren erzeugt werden. Zumindest findet man das so in Büchern, die meisten Compiler erlauben das nicht.
Lesezeichen