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 :wink:

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 :wink:

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]