AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Compiler Direktive OVERFLOWCHECKS

Ein Thema von p80286 · begonnen am 25. Aug 2009 · letzter Beitrag vom 25. Aug 2009
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Compiler Direktive OVERFLOWCHECKS

  Alt 25. Aug 2009, 13:37
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
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

Re: Compiler Direktive OVERFLOWCHECKS

  Alt 25. Aug 2009, 15:03
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#3

Re: Compiler Direktive OVERFLOWCHECKS

  Alt 25. Aug 2009, 15:17
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

Re: Compiler Direktive OVERFLOWCHECKS

  Alt 25. Aug 2009, 15:37
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).
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Compiler Direktive OVERFLOWCHECKS

  Alt 25. Aug 2009, 16:17
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#6

Re: Compiler Direktive OVERFLOWCHECKS

  Alt 25. Aug 2009, 17:21
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Compiler Direktive OVERFLOWCHECKS

  Alt 25. Aug 2009, 17:44
Also hat D7 einen an der Klatsche?????


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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 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