Procedure StaticBug()
Protected a = 11
Protected b = 22
Protected c = 33
Protected d = 44
Static z = #False
Debug "VOR Änderung der Static-Variable:"
Debug "a = "+Str(a)
Debug "b = "+Str(b)
Debug "c = "+Str(c)
Debug "d = "+Str(d)
Debug "z = "+Str(z)
z = 1 XOr z
Debug ""
Debug "NACH XOr-Operation mit Static-Variable:"
Debug "a = "+Str(a)+" < 'a' hat nun den Wert von 'b'"
Debug "b = "+Str(b)+" < 'b' hat nun den Wert von 'c'"
Debug "c = "+Str(c)+" < 'c' hat nun den Wert von 'd'"
Debug "d = "+Str(d)+" < komplett falscher Wert"
Debug "z = "+Str(z)
EndProcedure
StaticBug()
Debug-Ausgabe: hat geschrieben:VOR Änderung der Static-Variable:
a = 11
b = 22
c = 33
d = 44
z = 0
NACH XOr-Operation mit Static-Variable:
a = 22 < 'a' hat nun den Wert von 'b'
b = 33 < 'b' hat nun den Wert von 'c'
c = 44 < 'c' hat nun den Wert von 'd'
d = 4198507 < komplett falscher Wert
z = 1
Da die Protected-Variablen ja auf einem Stack gespeichert werden, ist es vermutlich ein Stack-Fehler beim XOR-Operator.
Gruß, PL.
[Nachtrag:]
Habe gerade festgestellt, dass dies nicht nur bei XOr-Operationen mit Static-Variablen der Fall ist (siehe Codebeispiel), sondern generell bei XOr-Operationen innerhalb einer Prozedur.
Also auch bei XOr-Operationen mit Globalen- und Protected-Variablen.
Ist also ein genereller Bug beim XOR-Operator !!!
Die 3. Zeile... Das machst du ja auch: Da wird doch versucht, in eine Variable das bool'sche Ergebnis zu speichern, sehe ich das richtig? Wenn ja, dann sag ich nur so viel: Das Rechnen mit bool'schen Ausdrücken wird (noch, wahrscheinlich ) nicht unterstützt. Wenn ich falsch liege, dann nehme ich alles zurück.
Procedure StaticBug()
Protected a = 11
Protected b = 22
Protected c = 33
Protected d = 44
Static z = #False
Debug "VOR Änderung der Static-Variable:"
Debug "a = "+Str(a)
Debug "b = "+Str(b)
Debug "c = "+Str(c)
Debug "d = "+Str(d)
Debug "z = "+Str(z)
z = 1 ! z
Debug ""
Debug "NACH XOr-Operation mit Static-Variable:"
Debug "a = "+Str(a)+" < 'a' hat nun den Wert von 'b'"
Debug "b = "+Str(b)+" < 'b' hat nun den Wert von 'c'"
Debug "c = "+Str(c)+" < 'c' hat nun den Wert von 'd'"
Debug "d = "+Str(d)+" < komplett falscher Wert"
Debug "z = "+Str(z)
EndProcedure
StaticBug()
korrekter weise ist z am ende 1
XOr usw. funktioniert nur im Kontext mit If
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Das ist kein Vergleichsoperator, also warum sollte XOr dort funktionieren?
Das ist ein Zuweisungsoperator, das geht nicht
PureBasic.chm hat geschrieben:Logisches XOR. Kann zum Kombinieren der logisch wahren ('true') und falschen ('false') Ergebnisse der Vergleichsoperatoren benutzt werden und ergibt die in der folgenden Tabelle enthaltenen Resultate.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.