Gefährlich: PB4 + "...AND NOT..."

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Gefährlich: PB4 + "...AND NOT..."

Beitrag von Hyper »

Hallo Gefährten,

wie ihr unten seht, ist bei "...AND NOT..." äußerste Vorsicht geboten, der Compiler meckert nicht, die Algebra wird einfach falsch angewendet. Meiner Meinung nach ein Bug.

Code: Alles auswählen

    If 0 And Not 0
      Debug "Fälschlicherweise wird dieser Text ausgegeben"
    EndIf
    
    If 0 And (Not 0)
      Debug "Richtigerweise wird dieser Text nicht ausgegeben"
    EndIf
PB 5.72
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Habe es mal an Fred gemeldet.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Ich habe ein ähnliches Phänomen mit Or Not():

Code: Alles auswählen

img.s
iid.l

  If img <> ""
    iid = LoadImage(#PB_Any, img)
  EndIf
  If img = "" Or iid = 0 Or Not(IsImage(iid))
    iid = CreateImage(#PB_Any, xs, ys)
  Else
    ResizeImage(iid, xs, ys)
  EndIf
Da meckert der Assembler:

Code: Alles auswählen

PureBasic.asm[49967]:
MP50
PureBasic.asm[2414]MP50[117]:
 AND 0,0
error: invalid operand.
Aus der Fehlermeldung muss man erstmal schlau werden...

Ich habe verschiedene Varianten probiert:

Code: Alles auswählen

  If img = "" Or iid = 0 Or Not(IsImage(iid))  ; => failed
  If img = "" Or (iid = 0) Or Not(IsImage(iid))  ; => ok
  If (img = "") Or iid = 0 Or Not(IsImage(iid))  ; => failed
  If img = "" Or iid = 0 Or (Not(IsImage(iid)))  ; => ok
  If iid = 0 Or Not(IsImage(iid))  ; => ok
  If img = "" Or iid = 0 Or IsImage(iid) = 0  ; => ok
Sicher ist es mit den Klammern besser, aber eigentlich sollte die erste Schreibweise gehen, da "=" Vorrang vor "Or" hat, oder? Ich werd's mal in den "Bug report" im englischen Forum stellen...

Sven
Gesperrt