Seite 1 von 1
[erledigt]For/Next - normales Verhalten oder Bug?
Verfasst: 25.04.2019 02:26
von Toshy
Hallo.
Vorab, ich nutze noch die PB Version 5.60 und habe seit Jahren mich icht mehr mit PB beschäftigt, erinnere mich also nicht mehr an alles.
Code: Alles auswählen
For Bytezaehler = 1 To 440
Next Bytezaehler
Debug "Bytezaehler:" + Str(Bytezaehler)
Wenn ich von dieser Schleife ausgehe hätte ich erwartet, NACH dem Ende der Schleife wäre der
Inhalt der Variablen "Bytezaehler" der Wert 440.
Nur ist es der Wert 441. Es wird also nach dem Ende der Schleife noch einmal hoch gezählt. Das kommt mir etwas eigenartig vor.
Ist das ein Bug, ist das "absichtlich" so und wenn es absichtlich ist, weshalb?
Das die Variable diesen Wert bekommen kann, obwohl er laut Schleife nicht auftreten dürfte erscheint mir nicht sehr schlüssig.
Gruß
Toshy
Re: For/Next - normales Verhalten oder Bug?
Verfasst: 25.04.2019 04:41
von Pelagio
Guten Morgen Toshy,
das Verhalten ist normal.
Beim Befehl 'FOR x TO y' wird die Schleife abgefragt und am Ende 'NEXT x' der Wert erhöht.
Ist 'x' jetzt höher als 'y' so wird nicht mehr in die Schleife gesprungen sondern das Programm weiter ausgeführt.
Re: For/Next - normales Verhalten oder Bug?
Verfasst: 25.04.2019 09:28
von GPI
Übrigens, es schadet nicht, den Inhalt von der Variable nach Next als ungültig anzusehen. Man sollte nicht damit arbeiten, ohne vorher sie einen Wert zuweisen.
Es ist bspw. denkbar, das man das Verhalten auf Grund von Optimierungen ändert oder eben, das es in anderen Programmiersprachen anders gelöst ist. Einfach eine Potentielle Fehlerquelle. Am besten Schleifen-Variablen nur innerhalb der Schleife benutzen.
Re: For/Next - normales Verhalten oder Bug?
Verfasst: 25.04.2019 10:28
von Kurzer
Die gleiche Frage hatte ich mir (und der geduldigen Community) vor 12 Jahren auch schon gestellt:
viewtopic.php?f=3&t=14614
Irgendwie kam auch mir das fremd vor, aber das scheint wirklich normal zu sein.
(und weil ich offenbar irgendwann danach "geblitzdingst" worden bin, habe ich drei Jahre später die gleiche Frage noch einmal gestellt, wie ich bei meiner Suche gerade feststelle.
- ich sag's euch, manche Multitasking-lastigen Berufe machen einen fertig.)
Re: For/Next - normales Verhalten oder Bug?
Verfasst: 25.04.2019 11:25
von Josh
Ist doch auch gut so. Damit kann überprüft werden, ob eine Schleife bis zum Ende durchlaufen wurde, oder ob sie mit Break abgebrochen wurde.
Re: For/Next - normales Verhalten oder Bug?
Verfasst: 25.04.2019 20:09
von Toshy
Ich danke euch.
Vermutlich habe ich den Beitrag damals auch gelesen. Nur ihn nicht mehr gefunden.
Ist halt alles lange her.
Und ich kämpfe mich gerade wieder ein bissl rein in das Zeug. So ist es, wenn es scheinbar auf der ganzen erreichbaren Welt nicht ein Tool gibt, daß macht was es soll. hihi.
Na ja, eines vielleicht. Nur wird da ständig mein Antivirenprogramm wach.
Na dann muß ich das irgendwie manuell bzw. anders lösen. Ist schon dumm. Zweite Variable für das, was man eh schon gezählt hat. Und dann ist es noch an der idealen Stelle.
Na ja, mal schauen ob ich den Wert nur um eines runter setze oder extra eine oder mehrere Variablen nutze.
Nochmals danke und Gruß Toshy
Re: For/Next - normales Verhalten oder Bug?
Verfasst: 26.04.2019 17:01
von juergenkulow
Hallo Toshy
Erzeugt folgenden Code:
Code: Alles auswählen
; For Bytezaehler = 1 To 440
MOV qword [v_Bytezaehler],1
JMP _ForSkipDebug1
_For1:
_ForSkipDebug1:
MOV rax,440
CMP rax,qword [v_Bytezaehler]
JL _Next2
;
; Next Bytezaehler
_NextContinue2:
INC qword [v_Bytezaehler]
JNO _For1
_Next2:
;
; Debug "Bytezaehler:" + Str(Bytezaehler)
Gruß
Re: [erledigt]For/Next - normales Verhalten oder Bug?
Verfasst: 28.04.2019 20:28
von silbersurfer
was mir noch aufgefallen ist, dass wenn next von vornherein kleiner als Start ist, die Schleife wie bei While Wend gleich übersprungen wird.
Re: [erledigt]For/Next - normales Verhalten oder Bug?
Verfasst: 28.04.2019 21:15
von GPI
füg ein "Step -1" ein

Re: [erledigt]For/Next - normales Verhalten oder Bug?
Verfasst: 30.04.2019 18:34
von silbersurfer
@GPI
füg ein "Step -1" ein
das weiß ich doch GPI, es ging mir mehr darum das nicht in die schleife gesprungen wird, sondern diese übersprungen wird was durchaus nützlich ist.