Hallo Dietmar,
ich bin Delphi-Anfänger und verstehe folgendes nicht:
Zitat von
Brüggendiek:
Auswertung boolscher Ausdrücke
(...)
Die verkürzte Auswertung von Boolean-Ausdrücken führt aber zu einer weiteren bösen Falle:
Delphi-Quellcode:
if (Length(StringVar)>=5) and (StringVar[5]='x') then
IrgendWas;
ist eine ganz gefährliche Sache. Bei optimiertem Boolean wird der 2. Teil nicht mehr ausgewertet; ohne Optimierung jedoch ergibt sich bei AnsiString die Situation, daß der Index außerhalb des Wertebereichs liegen kann.
Solange man in seiner
Unit/Komponente den B-Compilerschalter richtig einstellt, sollte beim Austausch von Quellcode nichts passieren. Wenn man sich jedoch auf die Einstellung des Compilers verläßt, ist man verlassen und erhält dann vom Anwender Rückmeldungen, daß das Ganze "manchmal" fehlerhaft läuft.
Du sprichst ja davon, dass bei manchen Abfragen das Ergebnis frühzeitig feststeht.
Wenn ich aber
Delphi-Quellcode:
if (Length(StringVar)>=5) and (StringVar[5]='x') then
IrgendWas;
schreibe, dann müssen doch auf jeden Fall beide Bedingungen geprüft werden, oder? Schließlich lässt sich aus der Richtigkeit der ersten Bedingung nicht auch das Zutreffen der zweiten schließen (jedenfalls in meiner Logik ^^).
Bitte sei so nett und erklär es mir noch mal etwas genauer
Gruß
Marcus