Zitat Zitat von fredyxx Beitrag anzeigen
Hallo,
vorweg will ich sagen, dass ich weiß, dass man goto eigentlich nicht verwenden soll!

Trotzdem meine Frage:

Der folgende Code funktioniert:

Code:
if (M1_fertig == true)  {
    goto M3_Sprung;    // M1u M2  werden übersprungen  
  }
Das Label "M3_Sprung" befindet sich weiter unten in einem größeren Programm

Während bei dem nächsten die Fehlermeldung "jump to label 'gummi' [-fpermissive]" erscheint.

Code:
    if (Entf_int >= 99) {
      digitalWrite (Pin_a, HIGH);
      digitalWrite (Pin_b, LOW);

      Ueberlauf();

goto gummi;

    }    // >>>>>  ENDE        if (Entf_int >= 99)

    String Einer = Entf_String.substring(1, 2);                // Selektion der Einerstelle
    String Zehner = Entf_String.substring(0, 1);              // Selektion der Zehnerstelle
gummi:
    Zehnerstelle = Zehner.toInt();
    Einerstelle = Einer.toInt();
Wenn ich "goto gummi;" und "gummi:" entferne, erhalte ich keine Fehlermeldung für dieses Programm.

Ich kann zwischen den beiden Beispielen keinen Unterschied erkennen.
Wie kommt es zu dieser Fehlermeldung beim Kompilieren?

Gruß
fredyxx slope game 2
Es sieht so aus, als ob das Problem mit dem goto-Befehl in deinem zweiten Beispiel auf die Sichtbarkeit des Labels gummi zurückzuführen ist. Der Compiler erlaubt es nicht, zu einem Label zu springen, das sich nicht im gleichen Block oder in einem gültigen Gültigkeitsbereich befindet.

In deinem ersten Beispiel funktioniert es, weil das Label M3_Sprung im gleichen Kontext wie der goto-Befehl definiert ist. Stelle sicher, dass das Label gummi ebenfalls im richtigen Gültigkeitsbereich ist.

Eine Alternative wäre, die Struktur deines Codes zu überdenken und goto zu vermeiden, indem du stattdessen Funktionen oder Kontrollstrukturen wie if oder switch verwendest.