![]() |
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:
Da in der D7-Hilfe steht der Overflowcheck sei lokal, gehe ich davon aus, daß ich ihn korrekt angewendet habe.
procedure Tuwas;
var i : integer; summe : integer; begin {$OVERFLOWCHECK OFF} ...... hier wird addiert .............. {$OVERFLOWCHECK ON} end; Auf ![]() Zitat:
Hab ich da etwas falsch verstanden, überlesen oder war es einfach ein "Druckfehler"? Gruß K-H |
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:
Gruß Gammatester
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. |
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. |
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). |
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 |
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) |
Re: Compiler Direktive OVERFLOWCHECKS
Also hat D7 einen an der Klatsche?????
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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