![]() |
Delphi-Version: 7
if not I = 0 then...
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:
Normalerweise würde ich eine solche Abfrage so formulieren:
procedure TForm1.Btn1Click(Sender: TObject);
var I: Integer; begin I := 1234; if not I = 0 then ShowMessage('Test'); end;
Delphi-Quellcode:
Oder alternativ eben mit Klammer:
procedure TForm1.Btn1Click(Sender: TObject);
var I: Integer; begin I := 1234; if I <> 0 then ShowMessage('Test'); end;
Delphi-Quellcode:
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.
procedure TForm1.Btn1Click(Sender: TObject);
var I: Integer; begin I := 1234; if not (I = 0) then ShowMessage('Test'); end; |
AW: if not I = 0 then...
Delphi wertet erst "not I" aus. Negiert also die Bits der Integer-Variable und vergleicht dann erst auf 0. Du musst in so einem Fall Klammern setzen.
|
AW: if not I = 0 then...
Ah, OK, da hätte ich jetzt selbst drauf kommen können. Vielen Dank! :-D
|
AW: if not I = 0 then...
Irgendwo in der OH steht auch nochmal eine Auflistung, was wie wann ausgewertet wird.
Klammern haben immer Vorrang not vor allem Negierung (-) wie ein not (- und not sind gleichrangig .. wer zuletzt kommt, ist eher dran) and vor or * und / vor + oder - ... |
AW: if not I = 0 then...
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.
|
AW: if not I = 0 then...
Zitat:
Was soll den Programmieren mit Mathe zu tun haben? :wink: |
AW: if not I = 0 then...
Zitat:
|
AW: if not I = 0 then...
Die gehen wohl davon auß, daß man heutzutage noch Zeit zum Lernen hat, in den Grund-/Haupt-/Realschulen/Gymnasien
|
AW: if not I = 0 then...
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz