![]() |
Compilerschalter auslesbar?
Moin,
ich steh gerade auf dem Schlauch. Ich möchte einen Compilerschalter (Rangechecks) temporär umstellen, diesen aber später wieder in den alten Zustand versetzen. Dazu müsste ich ja den alten Zustand erst einmal erfragen. Geht das überhaupt und wenn ja, wie? Ich meinte das in der Art
Delphi-Quellcode:
{$IF RANGECHECKS}
{$DEFINE WAR_AN} {$RANGECHECKS OFF} //Hier der entsprechende Code {$IFDEF WAR_AN} {$RANGECHECKS ON} {$ENDIF} |
Re: Compilerschalter auslesbar?
ja > [oh]$IFOPT[/oh] , aber das geht nur bei kompilerschaltern, welche aus einem Buchstaben mit + oder - bestehen
in deinem Fall geht das , da {$RANGECHECKS ON} = {$R+} und du wirst es nicht glauben, aber rate mal, welches Beispiel die OH zu [oh]$IFOPT[/oh] hat?
Delphi-Quellcode:
{$IFOPT R+}
Writeln('Mit Bereichsprüfung compiliert'); {$ENDIF} |
Re: Compilerschalter auslesbar?
Danke sehr.
|
Re: Compilerschalter auslesbar?
Hallo Detlef,
ich habe mir zu diesem Zweck ein paar Include-Dateien angelegt:
Code:
Die Dateien liegen in einem Bibliotheksverzeichnis und sind somit für alle Projekte verfügbar.
Datei "R+.pas"
{$ifopt R-} {$undef RangeCheckWasOn} {$R+} {$else} {$define RangeCheckWasOn} {$endif} Datei "R-.pas" {$ifopt R+} {$define RangeCheckWasOn} {$R-} {$else} {$undef RangeCheckWasOn} {$endif} Datei "R=.pas" {$ifdef RangeCheckWasOn} {$R+} {$else} {$R-} {$endif} Anwendung:
Delphi-Quellcode:
Das Konzept stammt noch aus den Zeiten von Turbo Pascal. Damals wurde der Schalter "=" allerdings noch direkt vom Compiler unterstützt, so dass der Umweg über die Include-Dateien nicht notwendig war.
{$I R+} // RangeCheck einschalten
... {$I R=} // RangeCheck auf vorigen Zustand setzen Gruß Hawkeye |
Re: Compilerschalter auslesbar?
Auch Dir Danke, ich hab es jetzt so:
Delphi-Quellcode:
Ob ich da richtig gedacht habe, wird sich dann zeigen ;)
uses ...,
{$IFOPT R+} {$DEFINE WAS_CHECKED} {$R-} {$ENDIF}UnitOhneBereichsprüfung {$IFDEF WAS_CHECKED} {$R+} {$ENDIF}; |
Re: Compilerschalter auslesbar?
Nicht ganz, diese Option ist nur unitintern, also dürfte dieses keine Auswirkungen auf die zwischenliegende Unit haben.
|
Re: Compilerschalter auslesbar?
Da bin ich mir eben nicht sicher, ich hatte vorher vor dem Einbinden {$RANGECHECKS OFF} und dahinter dann wieder das Einschalten. Das hat funktioniert. Zur Gegenprobe die Schalter auskommentiert, und es kamen Fehlermeldungen. Also wieder entkommentiert und alles ist OK. Zufall?
|
Re: Compilerschalter auslesbar?
Ich hätte eher an Zufall gedacht, denn sonst könnte man doch die VCL neu kompilieren, nur indem man andere Optionen vor dem Einbinden setzt?
Es ist aber auch schlecht/garnicht erklärt welche Option nun von wo bis wo genau ihre Auswirkungen hat :? |
Re: Compilerschalter auslesbar?
Tja, ich weiß es auch nicht. Wenn es jetzt so funktioniert wie gedacht, bleibt es so, ansonsten muss ich mir etwas anderes überlegen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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