![]() |
Delphi7 - Division durch Null bringt "verspäteten"
Hallo,
mir ist grade folgendes aufgefallen: Wenn ich bei folgendem Programm die Meldung auskommentiere, wird bei der Division keine Exception ausgelöst, ansonsten schon.
Delphi-Quellcode:
Da offenbar die Division erst ausgeführt wird, wenn das Ergebnis tatsächlich benötigt /ausgegeben wird, kannich mir jetzt nur vorstellen, daß ich irgendeine Compiler(?)Option setzten muss, weis aber nicht welche.
var
a,b,c:real; begin a:=1; b:=0; if a=1 then begin try begin c:=a/b; showmessage(floattostr(c)); end; except begin a:=2; end; end; end; if a=2 then showmessage('Abgefangen') else showmessage('Fehler') end; Ach so, ich nutze hier Delphi 7 Pro Thomasch |
Re: Delphi7 - Division durch Null bringt "verspäteten&
Die Ursache liegt im Control-Register der FPU.
Mit Set8087CW kann dieses Register verändert werden. Anscheinend gibt es ein Stückchen Software (Komponente, FremdUnit ?), die das Control-Register schon verändert hat. In der ![]() |
Re: Delphi7 - Division durch Null bringt "verspäteten&
Es liegt an der Code-Optimierung. Die kannst Du mit {$O-} abschalten, allerdings nur für die gesamte Unit. Du kannst es auch sehen, wenn Du einen BP setzen willst. Mit Optimierung kannst Du auf der Zeile nicht anhalten. Es wird also nicht wie Du vermutet hast, "verspätet dividiert", sondern die ganze "sinnlose" Zeile wird nicht kompiliert. Es stellt sich aber die Frage, ob Dein Beispiel in der Praxis Bedeutung hat. Denn ohne c Auszuwerten macht ja auch die Division keinen Sinn.
|
Re: Delphi7 - Division durch Null bringt "verspäteten&
Zitat:
In sofern ist der Hinweis auf die abschaltbare Codeoptimierung für mich schon wichtig - Danke nochmal. Thomasch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 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