Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Compiler Direktive OVERFLOWCHECKS (https://www.delphipraxis.net/139199-compiler-direktive-overflowchecks.html)

p80286 25. Aug 2009 13:37


Compiler Direktive OVERFLOWCHECKS
 
hallo zusammen,

könntet Ihr mir auf die Sprünge helfen?

ich möchte für eine Routine den OverFlowCheck abschalten:

Delphi-Quellcode:
procedure Tuwas;
var
  i : integer;
  summe : integer;
begin
  {$OVERFLOWCHECK OFF}
   
  ......
  hier wird addiert
 ..............
  {$OVERFLOWCHECK ON}
end;
Da in der D7-Hilfe steht der Overflowcheck sei lokal, gehe ich davon aus, daß ich ihn korrekt angewendet habe.

Auf delphibasics lese ich nun
Zitat:

It can and should only be set once in your code.
Was sich mit dem Verhalten meines Programms deckt.

Hab ich da etwas falsch verstanden, überlesen oder war es einfach ein "Druckfehler"?

Gruß
K-H

gammatester 25. Aug 2009 15:03

Re: Compiler Direktive OVERFLOWCHECKS
 
Eigentlich hat keiner so richtig recht, und meiner Meinung macht Delphi nicht das, was es soll. Experimentell ist es so, daß die letzte Anweisung für die gesamte Unit gilt, das folgende Testprogramm gibt zweimal 0 aus, kommentiert man das letzte {$OVERFLOWCHECKS OFF} aus, so wird nur der Runtime Error 215 ausgegebeben, d.h. das erste inc macht schon den Fehler.

Wenn schon global, hätte ich vermutet, daß die erste Einstellung gilt. (BP7 verhält sich wie erwartet, d.h. der Check ist wirklich lokal)

Delphi-Quellcode:
program xx;
{$apptype console}
var
  b1,b2: byte;
begin
  b1 := 255;
  b2 := 255;
  {$r-}
  {$OVERFLOWCHECKS OFF} 
  inc(b1);
  {$OVERFLOWCHECKS ON} 
  writeln(b1);
  inc(b2);
  {$OVERFLOWCHECKS OFF} 
  writeln(b2);
end.
Gruß Gammatester

himitsu 25. Aug 2009 15:17

Re: Compiler Direktive OVERFLOWCHECKS
 
also bei mir funktioniert es korrekt und er steigt bei inc(b2); aus

sowohl mit deinem Code,
also auch mit diesem, welcher nicht gleich das Programm beendet und 'ne Fehlermeldung ausgibt
Delphi-Quellcode:
program Project1;

{$apptype console}

uses sysutils;

var b1,b2: byte;

begin
  try
    b1 := 255;
    b2 := 255;
    {$OVERFLOWCHECKS OFF}
    Inc(b1);
    {$OVERFLOWCHECKS ON}
    WriteLn(b1);
    Inc(b2);
    {$OVERFLOWCHECKS OFF}
    WriteLn(b2);
  finally
    ReadLn;
  end;
end.

gammatester 25. Aug 2009 15:37

Re: Compiler Direktive OVERFLOWCHECKS
 
Du willst sagen, daß, wenn Du das letzte {$OVERFLOWCHECKS OFF} wegläßt, der Check by inc(b2) zuschlägt, aber nicht bei inc(b1)?

D2 bis D9 verhalten sich bei mir nicht so, sondern wie oben beschrieben. Insbesondere werden immer entweder zwei Nullen ausgegeben oder ein Fehler. Willst Du sagen, daß bei Dir eine Null und ein Fehler kommen?

Gruß Gammatester

PS/Edit: Habe gerade nach geschaut mit Deinem Code: Wenn das {$OVERFLOWCHECKS OFF} vorhanden ist, werden im ASM-Code keine call @IntOver generiert, wenn es fehlt durchaus (bei D6).

p80286 25. Aug 2009 16:17

Re: Compiler Direktive OVERFLOWCHECKS
 
Also ich hab jetzt mal Himitsus Code ausprobiert (D7)
egal ob in der IDE (Projekt-Optionen-Compiler) die Überlaufprüfung aktiviert war (jeweils ein Build ausgeführt),
es gab keine Fehlermeldung!
Es wurden zwei Nullen ausgegeben.

Sehr irritierend!


In D2006 (Turbo) steigt er (egal was in den Projekt-Optionen definiert wurde) immer bei inc(b2) aus.

Gruß
K-H

himitsu 25. Aug 2009 17:21

Re: Compiler Direktive OVERFLOWCHECKS
 
D7 = letzte Angabe
D06 & D09 = OK

aber ich mag diese Angabe in der OH eh nicht

da gibt es nur lokal und global
und was ist mit AppGlobal, UnitGlobal und Lokal(mehrfach umschaltbar innerhalb einer Unit)

p80286 25. Aug 2009 17:44

Re: Compiler Direktive OVERFLOWCHECKS
 
Also hat D7 einen an der Klatsche?????


Zitat:

Zitat von himitsu
D7 = letzte Angabe
...und was ist mit AppGlobal, UnitGlobal und Lokal(mehrfach umschaltbar innerhalb einer Unit)

Stimmt da war mal was aber TP ist sooo lange her!

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz