Seite 1 von 1

For/Next-Schleife in Macro

Verfasst: 02.09.2007 12:13
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

Verfasst: 02.09.2007 12:55
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.

Verfasst: 02.09.2007 13:55
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

Verfasst: 02.09.2007 14:32
von #NULL
..übrigens: unter PB4.02 keine probleme damit

Verfasst: 02.09.2007 14:37
von Kaeru Gaman
yo danke kollegen.
wurde schon im englischen Forum gemeldet.

Verfasst: 02.09.2007 14:58
von Little John
Ach so, sorry. Im englischen Forum hatte ich leider nicht nachgekuckt.

Gruß, Little John

Verfasst: 02.09.2007 14:59
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ß.

Verfasst: 17.09.2007 22:53
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.