Rechenoperation in Macro

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Rechenoperation in Macro

Beitrag 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
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Rechenoperation in Macro liefert falsches Ergebnis

Beitrag 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)
Bild
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: [WINDOWS] Rechenoperation in Macro liefert falsches Erge

Beitrag 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.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: [WINDOWS] Rechenoperation in Macro liefert falsches Erge

Beitrag von Demivec »

Schreibe es stattdessen so:

Code: Alles auswählen

Macro _TestMacro(x0,x1)
	Debug  (x0)*(x1)	
EndMacro
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: [WINDOWS] Rechenoperation in Macro liefert falsches Erge

Beitrag 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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Rechenoperation in Macro

Beitrag von RSBasic »

erledigt
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Rechenoperation in Macro

Beitrag von Nino »

Vielen Dank! :allright:
Antworten