Seite 1 von 1

Rechenoperation in Macro

Verfasst: 01.06.2018 02:08
von diceman

Code: Alles auswählen

PB-Version: 5.62 (Windows - x64)
OS: Windows 10, 64 Bit
Compilereinstellungen:
    [ ] Enable inline ASM syntax coloring
    [x] Create threadsafe executable
    [ ] Enable OnError lines support
    [x] Enable modern theme support (for Windows XP and above)
    [ ] Request Administrator mode for Windows Vista and above
    [ ] Request User mode for Windows Vista and above (no virtualisation)
Wenn ich zwei Parameter, von denen einer sich aus zwei Variablen zusammensetzt, einem Macro übergebe in dem multipliziert wird, produziert das Macro ein falsches Ergebnis, wenn man die beiden Variablen des einen Parameters nicht "klammert".
Im folgenden Snippet führe ich den Test einmal mit Macro und dann nochmal mit einer Prozedur durch. Die Prozedur liefert in beiden Fällen ein fehlerloses Ergebnis.
Wenn ich im Macro lediglich die beiden erhaltenen Parameter addiere, entsteht kein falsches Ergebnis. Jede andere mathematische Operation (Minus, Mal, Geteilt, Wurzel, etc.) liefert ein falsches Ergebnis bei nicht geklammerter Parameter-Übergabe. Mit Debug im Macro lässt sich leicht überprüfen, daß die Parameter auf jeden Fall richtig erhalten werden, egal ob mit Klammer oder ohne.

Code: Alles auswählen

EnableExplicit
Define value = 2


Macro _TestMacro(x0,x1)
	Debug  x0*x1						;Operation (alle Operatoren außer + produzieren ein fehlerhaftes Ergebnis)
EndMacro

Procedure testProcedure(x0,x1)
	Debug  x0*x1
EndProcedure


Debug ""
Debug "Macro"
_TestMacro(10,value+1)			;Ohne Klammer
_TestMacro(10,(value+1))		;Mit Klammer

Debug ""
Debug "Procedure"
testProcedure(10,value+1)		;Ohne Klammer
testProcedure(10,(value+1))		;Mit Klammer

Debug ""
Debug "Macro (direkte Übergabe der Parameter)"
_TestMacro(10,3)

End
__________________________________________________
Thread verschoben
Bugs>Anfänger
01.06.2018
RSBasic

Re: Rechenoperation in Macro liefert falsches Ergebnis

Verfasst: 01.06.2018 02:19
von NicTheQuick
Das ist schon korrekt so bei Macros. Da wird einfach 1:1 ersetzt, was als Parameter übergeben wird. Das kann ja alles mögliche sein und nicht unbedingt eine Zahl. Deswegen wird auch nicht automatisch geklammert. Das heißt aus

Code: Alles auswählen

_TestMacro(10,value+1)
wird einfach

Code: Alles auswählen

Debug  10*value + 1
und aus

Code: Alles auswählen

_TestMacro(10,(value+1))
wird

Code: Alles auswählen

Debug  10*(value + 1)

Re: [WINDOWS] Rechenoperation in Macro liefert falsches Erge

Verfasst: 01.06.2018 02:26
von diceman
Oha, alles klar! :? :allright:
Sorry, dann kann der Beitrag in den Mülleimer. Dachte halt ich weise drauf hin, weil mich der Effekt gerade mindestens 2 Stunden meines Lebens gekostet hat. :wink:
Danke fürs Aufschlüsseln. So betrachtet ist das natürlich kein Bug mehr.

Re: [WINDOWS] Rechenoperation in Macro liefert falsches Erge

Verfasst: 01.06.2018 03:26
von Demivec
Schreibe es stattdessen so:

Code: Alles auswählen

Macro _TestMacro(x0,x1)
	Debug  (x0)*(x1)	
EndMacro

Re: [WINDOWS] Rechenoperation in Macro liefert falsches Erge

Verfasst: 01.06.2018 19:04
von Nino
diceman hat geschrieben:Oha, alles klar! :? :allright:
Sorry, dann kann der Beitrag in den Mülleimer. Dachte halt ich weise drauf hin, weil mich der Effekt gerade mindestens 2 Stunden meines Lebens gekostet hat. :wink:
Danke fürs Aufschlüsseln. So betrachtet ist das natürlich kein Bug mehr.
Der Titel dieses Threads suggeriert, dass hier ein Bug gefunden wurde. Das ist aber nicht der Fall.
Daher ist der Titel falsch und grob irreführend!

Kann bitte jemand den Thread-Titel anpassen oder tatsächlich den ganzen Thread in den Mülleimer verschieben?

Re: Rechenoperation in Macro

Verfasst: 01.06.2018 19:15
von RSBasic
erledigt

Re: Rechenoperation in Macro

Verfasst: 01.06.2018 19:19
von Nino
Vielen Dank! :allright: