Ich bin auch der meinung GOTOs sollte man im allgemein vermeiden, es gibt einfach viele situationen wo man keine GOTOs verwenden sollte.

Um 'Schleifen' zu unterbrechen gibt es genug befehle im Bascom um dieses zu tun, wenn man auch Schleifen benutzt.

For I = 1 to 10
#Code
If #Bedingung = TRUE Then Exit For
Next I

While #Bedingung = TRUE
#Code
If #Bedingung2 = TRUE Then Exit While
Wend

diese tolle Funktionen benutzen interne GOTOs mit den man nichts zu tun hat und so auch kaum probleme verursachen
Die IF variante würde so aussehen

Code:
Dim Counter as Byte
Dim Countfrom as Byte
Dim Countto as Byte
Dim Breakbedingung as Bit

   'Alias For I = 1 To 10
   Countfrom = 1
   Countto = 10
   Counter = Countfrom
Pseudofor_start:
   #Code
   If Breakbedingung = 1 Then Goto Pseudofor_end
   If Countto > Counter Then
      Incr Counter
      Goto Pseudofor_start
   End If
Pseudofor_end:
Man sollte kein GOTO benutzten bei einem CALL, wo es ein RETI gibt beim rücksprung. Das ist ein Return befehl der die Register wieder herstellt.

Also mit einem Call Befehl werden vorher die Register gespeichert, bei den Return befehl werden die wieder hergestellt, man sollte nicht in ein solchen Bereich rein oder raus springen.

SUB FUNCTION
<-- Hier nicht reinspringen
---> Hier nicht rausspringen mit Goto, Gosub ist ok.
END SUB FUNCTION

On Urxc Onrxd <-- Interruptaufruf wenn 1 Zeichen emfangen wurde(COM).


Hier werden die Register gesichert und nacher zurück geschrieben.
Onrxd:
<-- Mit einem Sprung hier rein überschreibst du die Register mit unbekannte werte
--> Mit einem Sprung hier raus werden die werte nicht wieder hergestellt beim nächsten RETURN
Return <-- Ist ein RETI

Mit GOTOs kann man auch schnell wieder in ein Programmteil landen der dir die Display variablen ändert während du sie gerade übertragst, oder einfach eine Variable ändert die was mit dem Display zu tun hat.
Wenn du z.b. Ein String hast das die erste Zeile deines Displays entspricht, kann es passieren das wenn du vorher noch mit einem Index point ein Byte im String änderst, das dieses zu Fehlern kommen kann. Das kann es passieren, sollte man gerne Variablen doppelt benutzen, das diese in einem anderen Teil des Programs geändert wird, aber beim Display benutzt wird um das Index zu steuern. So kann es passieren das da dann Mühl steht.

Natürlich gibts noch andere möglichkeiten, dafür müsste man aber mehr über das Programm wissen, und auch welche Bascom version du mit welchen Prozessor benutzt.

Vielleicht habe ich dir ja schon so geholfen, sonst kannst dich ja nochmal melden.



Ich benutze GOTOs manchmal um platz zu sparen und die 'AND' und 'OR' funktion zu ersetzen

Code:
Dummerweise sparrt das Platz :(
Statt:

If Var1 = 1 And Var2 = 1 Then 
   #Code
Else
   #Code
End If

If Var1 = 1 Then
   If Var2 = 1 Then
      #Code
   Else
      Goto Now_do_else
   End If
Else
Now_do_else:
   #Code
End If

   oder:-

If Var1 = 1 Or Var2 = 1 Then 
   #Code
Else
   #Code
End If

If Var1 = 1 Then
   Goto Now_do_if
End If

If Var2 = 1 Then
Now_do_if:
   #Code
Else
   #Code
End If