For/Next-Schleife in Macro

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Little John

For/Next-Schleife in Macro

Beitrag von Little John »

Hallo zusammen,

wie ja in der Hilfe zu For : Next angegeben, kann die Laufvariable noch einmal hinter Next stehen, muss aber nicht. Also funktionieren beide folgenden Codeschnipsel (alles getestet mit PureBasic 4.10 Beta 3 für Windows):

Code: Alles auswählen

; einfache Variante 1
For i = 1 To 3
   Debug i
Next i
Debug "Huhu"

Code: Alles auswählen

; einfache Variante 2
For i = 1 To 3
   Debug i
Next
Debug "Huhu"
So weit, so gut.

Jetzt das gleiche jeweils innerhalb eines Macros:

Code: Alles auswählen

; Macro-Variante 1
Macro Display
   For i = 1 To 3
      Debug i
   Next i
   Debug "Huhu"
EndMacro

Display

Code: Alles auswählen

; Macro-Variante 2
Macro Display
   For i = 1 To 3
      Debug i
   Next
   Debug "Huhu"
EndMacro

Display
In Macra-Variante 2 bewirkt die Next-Zeile einen "Syntax error!". Das kann nur ein Bug sein.

Wenn man den Befehl hinter der Next-Zeile deaktiviert oder entfernt läuft der Code lustigerweise wieder:

Code: Alles auswählen

; Macro-Variante 2a
Macro Display
   For i = 1 To 3
      Debug i
   Next
;   Debug "Huhu"
EndMacro

Display
Gruß, Little John
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Es ist ein Bug, aber es ist auch nicht nötig, den letzten Befehl wegzulassen.

Folgende Variante geht trotzdem:

Code: Alles auswählen

; Macro-Variante 2 b
Macro Display 
   For i = 1 To 3 
      Debug i 
   Next :
   Debug "Huhu" 
EndMacro 

Display
Man beachte den :Doppelpunkt: hinter Next. Dieser dient ja dazu, mehrere Befehle in eine Zeile zu schreiben. Ich vermute, das PureBasic sich irgendwie vertut mit den letzten beiden Zeilen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Little John

Beitrag von Little John »

AND51 hat geschrieben:... aber es ist auch nicht nötig, den letzten Befehl wegzulassen.
[...]
Man beachte den :Doppelpunkt: hinter Next.
Ja, interessant.
Wie gesagt, mit i hinterm Next geht's ja auch. Aber wenn hinterm Next nichts mehr auf derselben Zeile steht, und die nächste Codezeile nicht EndMacro heißt, dann scheint es nicht zu funktionieren.

Gruß, Little John
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

..übrigens: unter PB4.02 keine probleme damit
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo danke kollegen.
wurde schon im englischen Forum gemeldet.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

Beitrag von Little John »

Ach so, sorry. Im englischen Forum hatte ich leider nicht nachgekuckt.

Gruß, Little John
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nein kein problem.
dafür haben wir ja unsere eigene Bug-ecke eingerichtet.

ich wollte euch nur informieren, dass das Team schon bescheid weiß.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Beitrag von michel51 »

Kaeru Gaman hat geschrieben:nein kein problem.
dafür haben wir ja unsere eigene Bug-ecke eingerichtet.

ich wollte euch nur informieren, dass das Team schon bescheid weiß.
Dann ist das ja geregelt :)
Ich habe mal ALLE obigen Beispiele getestet

Code: Alles auswählen

Debug ""
Debug "Variante 1"
; einfache Variante 1
For i = 1 To 3
   Debug i
Next i
Debug "Huhu"

Debug ""
Debug "Variante 2"
; einfache Variante 2
For i = 1 To 3
   Debug i
Next
Debug "Huhu"

Debug ""
Debug "Variante 3"
; Macro-Variante 3
Macro Display
   For i = 1 To 3
      Debug i
   Next i
   Debug "Huhu"
EndMacro

Display

Debug ""
Debug "Variante 4"
; Macro-Variante 4
Macro Display1
   For i = 1 To 3
      Debug i
   Next
   Debug "Huhu"
EndMacro

Display1

Debug ""
Debug "Variante 5"
; Macro-Variante 5
Macro Display3
   For i = 1 To 3
      Debug i
   Next
;   Debug "Huhu"
EndMacro

Display3

Debug ""
Debug "Variante 6"
; Macro-Variante 6
Macro Display4
   For i = 1 To 3
      Debug i
   Next :
   Debug "Huhu"
EndMacro

Display4
...und habe als Ergebnis das, was rauskommen muss, auch bei den Macros !

Code: Alles auswählen

Variante 1
1
2
3
Huhu

Variante 2
1
2
3
Huhu

Variante 3
1
2
3
Huhu

Variante 4
1
2
3
Huhu

Variante 5
1
2
3

Variante 6
1
2
3
Huhu
Die einzige Fehlermeldung, die kam, war "i is not a valid operator" und bezog sich auf die Macros, wenn sie gleich benannt sind. Dem konnte aber abgeholfen werden für diesen Test.
Also: auf dem Mac läuft das ordentlich, oder??
Wollte das der Vollständigkeit halber hier sagen.
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Antworten