Seite 1 von 2

For : Next

Verfasst: 07.02.2005 06:37
von bluejoke
Hallo!

Ich hab jetzt endlich herausgefunden, weshalb bei mir so eine mysteriöse Fehlermeldung kam:
Compiler hat geschrieben:PureBasic.asm [62];
CMP 7,dword[v_i]
error: invalid operand.
das 62 zeigt anscheinend auf den Ursprung des Fehlers.


Mein fehlerhafter Code (jetzt natürlich nur der ausschlaggebende Teil) war:

Code: Alles auswählen

For [b]i.l=0 To i.l=7[/b]
  Debug i
Next
Richtig ist natürlich

Code: Alles auswählen

For [b]i.l=0 To 7[/b]
  Debug i
Next
Es wäre irgendwie cool, wenn man eine verständlichere Fehlermeldung bringen könnte. Bei "For 0 to 7" kommt ja auch was verstehbares...

Verfasst: 07.02.2005 08:06
von DarkDragon
Der PureBasic code wird ja zuerst in ASM Code umgewandelt und dann wird er compilliert. Die Fehlermeldung ist von FASM. In FASM gibts For : Next allerhöchstens als macro.

Verfasst: 07.02.2005 10:26
von Froggerprogger
Der PB-Compiler sollte trotzdem einen Syntax Error werfen, da im to-Teil der Schleife kein Gleichheitszeichen erlaubt ist. Das macht er aber nie, auch nicht bei z.B. PeekL(12=8 ).

Verfasst: 07.02.2005 10:45
von DarkDragon
Naja, also das ist wohl eine der Dinge, die Fred zuletzt beheben sollte, denn es ist ja kein wirklich großes Problem. ;) Macht es denn wirklich soviel aus die Hilfe nach For : Next aufzuschlagen?

Verfasst: 07.02.2005 12:12
von bluejoke
Ich hatte die Schleifen ja teilweise richtig. Das ist einfach ein Leichtssinnsfehler den man nur schwierig wieder findet.
Ist es wirklich ein so großes Problem die Fehlermeldung zu ändern?
Bei anderen Gelegenheiten gibts ja auch verständliche Hinweise.

Verfasst: 07.02.2005 12:16
von DarkDragon
bluejoke hat geschrieben:Ich hatte die Schleifen ja teilweise richtig. Das ist einfach ein Leichtssinnsfehler den man nur schwierig wieder findet.
Ist es wirklich ein so großes Problem die Fehlermeldung zu ändern?
Bei anderen Gelegenheiten gibts ja auch verständliche Hinweise.
Ja, denn es ist eine FASM Fehlermeldung und keine PB Interne. Also wende dich an die Hersteller von FASM, dass die eine neue speziell für dich angepasste PureBasic FASM version erstellen :P .

Verfasst: 07.02.2005 12:42
von remi_meier
Ne DarkDragon
PureBasic sollte diesen Fehler vorher abfangen oder diesen Vergleich "i.l = 7" richtig auswerten.
Es ist ja nichtmal unbedingt ein Syntaxfehler...

greetz
remi

Verfasst: 07.02.2005 12:44
von Froggerprogger
Es kommt aber nur deswegen zu einer FASM-Fehlermeldung, da PB diesen Fehler nicht abfängt. Es hätte sogar sein können, dass nichtmal ein FASM-Fehler auftaucht, sondern das Programm einfach nur seltsam funktioniert.

Fred müßte seinen Syntax-Check erweitern, was etwas komplizierter sein könnte. Vorteil wäre, dass dann auch Ausdrücke, wie 5 = 2 > 8 abgefangen werden könnten. Da das in PB kein sinnvoller Ausdruck ist, sollte er meiner Meinung nach abgefangen werden.

Ist mir aber auch nicht soo wichtig.

P.S.: Whoops, da war remi schneller.
Was mir wegen remis Post aber noch einfällt (die Diskussion gabs aber schonmal):
Wenn ein boolescher Ausdruck 0 oder 1 zurückgäbe, wäre das sehr cool, dann wäre nach
a = 7 > 3 zum Beispiel a = 1.

Verfasst: 07.02.2005 13:14
von Caliban
Wenn ein boolescher Ausdruck 0 oder 1 zurückgäbe, wäre das sehr cool, dann wäre nach
a = 7 > 3 zum Beispiel a = 1.
Ist doch so oder ?

Code: Alles auswählen

x = 1 < 2
Debug x
x = 1 > 2
Debug x

Verfasst: 07.02.2005 14:12
von Froggerprogger
Nee, das ist manchmal Zufall, dass das klappt. Scheint nur mit Konstanten zu klappen. Wahrscheinlich wird deren Wert einfach zur Compilezeit ausgerechnet. Aber insbesondere geht es nicht mit Variablen:

Code: Alles auswählen

a = 2
x = (a < 1)
Debug x