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
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.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:
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







Zitieren

Lesezeichen