Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi7 - Division durch Null bringt "verspäteten" Fehler (https://www.delphipraxis.net/53328-delphi7-division-durch-null-bringt-verspaeteten-fehler.html)

thomasch 14. Sep 2005 10:11


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:
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;
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.
Ach so, ich nutze hier Delphi 7 Pro

Thomasch

shmia 14. Sep 2005 10:26

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 JCL gibt es die Unit Jcl8087. Damit kann man die FPU wesentlich besser steuern, als dies mit der VCL oder eigenem Assembler möglich ist.

Union 14. Sep 2005 10:34

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.

thomasch 14. Sep 2005 11:08

Re: Delphi7 - Division durch Null bringt "verspäteten&
 
Zitat:

Zitat von Union
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.

Ich war halt erstmal "erschrocken", da ich zumindest so lange an dem Programm schreibe schon jeden Fehler gemeldet bekommen möchte. Zumal der Fehler bei einer folgenden Rechenoperation ebenfalls nicht auftrat, sondern erst bei der Ergebnisausgabe.

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