Thema: Delphi if not I = 0 then...

Einzelnen Beitrag anzeigen

MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

if not I = 0 then...

  Alt 29. Nov 2011, 11:44
Delphi-Version: 7
Ich habe gerade eine seltsame Entdeckung gemacht. Und verhält sich Delphi bei der Auswertung eines bestimmten boole'schen Ausdrucks nicht so, wie ich es erwarten würde. Konkret handelt es sich um folgende Abfrage:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 1234;

  if not I = 0 then
    ShowMessage('Test');
end;
Normalerweise würde ich eine solche Abfrage so formulieren:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 1234;

  if I <> 0 then
    ShowMessage('Test');
end;
Oder alternativ eben mit Klammer:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 1234;

  if not (I = 0) then
    ShowMessage('Test');
end;
Ich dachte allerdings bisher, auch die erste Variante würde zum Ziel führen, da sich Delphi auch nicht darüber beschwert, dass "I" bspw. selbst kein boole'scher Ausdruck ist und "not I" damit ebenfalls nicht. In welcher Reihenfolge wertet Delphi den ersten Ausdruck denn dann aus, wenn es ihn insgesamt als korrekten boole'schen Ausdruck wertet? Fakt ist jedenfalls, dass der if-Zweig nur in den beiden letztgenannten Ausdrücken durchlaufen wird.
  Mit Zitat antworten Zitat