Seite 1 von 2
Operatorproblem
Verfasst: 22.03.2009 15:26
von Andesdaf
Hallo!
Code: Alles auswählen
Procedure Wert1 (W1.s)
ProcedureReturn Val(W1)
EndProcedure
Procedure Wert2 (W2.s)
ProcedureReturn Val(W2)
EndProcedure
Procedure Werti1 ()
ProcedureReturn 1
EndProcedure
Procedure Werti2 ()
ProcedureReturn 2
EndProcedure
wert.i = 0
werti.i = 0
For i = 1 To 10
wert + Wert1("1")*100 + Wert2("2")*50
werti + Werti1()*100 + Werti2()*50
Next
Debug wert
Debug werti
Müsste doch eigentlich dasselbe rauskommen, oder?
werti stimmt, wert nicht.
Unter PB 4.2 ist es richtig.
Verfasst: 22.03.2009 15:35
von ts-soft
> Müsste doch eigentlich dasselbe rauskommen, oder?
ja, ist ein Bug, der in ähnlicher Form bei mehreren Stringoperationen kommt.
Abhilfe wäre sauberes Coding:
Code: Alles auswählen
Procedure Wert1 (W1.s)
Protected result = Val(W1)
ProcedureReturn result
EndProcedure
Procedure Wert2 (W2.s)
Protected result = Val(W2)
ProcedureReturn result
EndProcedure
Procedure Werti1 ()
ProcedureReturn 1
EndProcedure
Procedure Werti2 ()
ProcedureReturn 2
EndProcedure
wert.i = 0
werti.i = 0
For i = 1 To 10
wert + Wert1("1")*100 + Wert2("2")*50
werti + Werti1()*100 + Werti2()*50
Next
Debug wert
Debug werti
Verfasst: 22.03.2009 15:37
von Andesdaf
danke. wusste nicht, dass das bei ProcedureReturn nicht sauber ist.
Verfasst: 22.03.2009 15:41
von ts-soft
Andesdaf hat geschrieben:danke. wusste nicht, dass das bei ProcedureReturn nicht sauber ist.
Das sag ich so, in PB ist das eigentlich ok, aber da andere Sprachen sowas
meist auch nicht unterstützen, mache ich es lieber auf nummer sicher

Verfasst: 22.03.2009 15:44
von Andesdaf
wenn es so geht und der Bug anscheinend bekannt ist, ist das Problem ja
aus dem Weg geschafft und eine Lösung vorhanden.
Verfasst: 22.03.2009 15:46
von ts-soft
Den Bug sollteste schon im engl. melden, ist ja einer.
Aber als besonders wichtig würde ich den nicht einstufen.
Verfasst: 22.03.2009 15:51
von hjbremer
bleibt trotzdem ein Bug finde ich
denn Debug Wert1("1") gibt korrekt 1 zurück
wenn man es so macht
Code: Alles auswählen
wert.i = 0
werti.i = 0
For i = 1 To 10
a = Wert1("1")*100
b = Wert2("2")*50
wert + a + b
werti + Werti1()*100 + Werti2()*50
Next
Debug wert
Debug werti
funktioniert es
In 4.2 hat es noch funktioniert, da wurde wert + Wert1("1")*100 + Wert2("2")*50 korrekt ausgewertet
Verfasst: 22.03.2009 15:51
von Kaeru Gaman
wurde das nicht schon längst gemeldet?
das ist ein ganz allgemeines Problem mit der direkten Verwendung von Rückgabewerten,
egal ob in ProcedureReturn, oder in anderen Zusammenhängen.
Verfasst: 22.03.2009 16:19
von ts-soft
@Andesdaf
Du hast im engl. die funktionierende Version von mir gepostet, wie soll Fred
so den Fehler sehen, bring das mal in Ordnung, bitte

Verfasst: 22.03.2009 16:22
von Andesdaf
oh, habe ich jetzt korrigiert.
Und wie ts schon gesagt hab, im engl. Forum gepostet.
[Konnte es mir nicht nehmen lassen, auch im engl. Forum die Schweine aufzusuchen]