Compileranweisungen
In diesem Thema werden Prozessor- und Compileranweisungen beschrieben.
Informationen zu F# Interactive-Anweisungen (dotnet fsi
) finden Sie unter Interaktive Programmierung mit F#.
Präprozessoranweisungen
Einer Präprozessordirektive wird das #-Symbol vorangestellt und wird für sich genommen in einer Zeile angezeigt. Sie wird durch den Präprozessor interpretiert, der vom Compiler ausgeführt wird.
In der folgenden Tabelle werden die Präprozessoranweisungen aufgelistet, die in F# verfügbar sind.
Anweisung | Beschreibung |
---|---|
#if Symbol |
Unterstützt die bedingte Kompilierung. Code im Abschnitt nach der Einbeziehung von #if , wenn das Symbol definiert ist. Das Symbol kann auch mit ! negiert werden. |
#else |
Unterstützt die bedingte Kompilierung. Markiert einen einzubeziehenden Codeabschnitt, wenn das mit dem vorherigen verwendeten #if nicht definiert ist. |
#endif |
Unterstützt die bedingte Kompilierung. Markiert das Ende eines bedingten Codeabschnitts. |
# [Zeile] int,# [Zeile] int-Zeichenfolge,# [Zeile] int verbatim-string |
Gibt die ursprüngliche Quellcodezeile und den Dateinamen für das Debuggen an. Diese Funktion wird für Tools bereitgestellt, die F#-Quellcode generieren. |
#nowarn Warnungscode |
Deaktiviert eine Compilerwarnung oder Warnungen. Suchen Sie zum Deaktivieren einer Warnung nach ihrer Nummer in der Compilerausgabe, und setzen Sie sie in Anführungszeichen. Lassen Sie das Präfix „FS“ weg. Zum Deaktivieren von mehreren Warnnummern in derselben Zeile müssen Sie jede Nummer in Anführungszeichen setzen und jede Zeichenfolge durch ein Leerzeichen abtrennen. Beispiel: #nowarn "9" "40" |
Die Auswirkung in Bezug auf die Deaktivierung einer Warnung gilt für die gesamte Datei, einschließlich Teilmengen der Datei, die der Anweisung vorausgehen.
Anweisungen für die bedingte Kompilierung
Der durch eine dieser Anweisungen deaktivierte Code wird im Visual Studio Code-Editor abgeblendet angezeigt.
Hinweis
Das Verhalten der Anweisungen für die bedingte Kompilierung entspricht nicht dem in anderen Sprachen. Beispielsweise können Sie keine booleschen Ausdrücke mit Symbolen verwenden, zudem verfügen true
und false
über keine besondere Bedeutung. In der if
-Anweisung von Ihnen verwendete Symbole müssen über die Befehlszeile oder in den Projekteinstellungen definiert werden. Es steht keine define
-Präprozessoranweisung zur Verfügung.
Im folgenden Code wird die Verwendung der Anweisungen #if
, #else
und #endif
veranschaulicht. In diesem Beispiel enthält der Code zwei Versionen der Definition von function1
. Wenn VERSION1
mithilfe der Option -define compiler definiert wird, wird der Code zwischen den Anweisungen #if
und #else
aktiviert. Andernfalls wird der Code zwischen #else
und #endif
aktiviert.
#if VERSION1
let function1 x y =
printfn "x: %d y: %d" x y
x + 2 * y
#else
let function1 x y =
printfn "x: %d y: %d" x y
x - 2*y
#endif
let result = function1 10 20
Es gibt keine #define
-Präprozessordirektive in F#. Sie müssen die Compileroption oder Projekteinstellungen verwenden, um die durch die #if
-Direktive verwendeten Symbole zu definieren.
Direktiven für die bedingte Kompilierung können geschachtelt werden. Der Einzug ist für Präprozessordirektiven nicht entscheidend.
Sie können ein Symbol auch mit !
negieren. In diesem Beispiel ist der Wert einer Zeichenfolge nur dann interessant, wenn kein Debuggen erfolgt:
#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif
Line-Anweisungen
Beim Erstellen meldet der Compiler Fehler im F#-Code durch das Referenzieren von Zeilennummern, in denen die jeweiligen Fehler auftreten. Diese Zeilennummern beginnen bei 1 für die erste Zeile in einer Datei. Wenn Sie jedoch F#-Quellcode aus einem anderen Tool generieren, sind die Zeilennummern im generierten Code im Allgemeinen nicht relevant, da die Fehler im generierten F#-Code höchstwahrscheinlich auf eine andere Quelle zurückgehen. Mit der #line
-Direktive können Autoren von Tools, die F#-Quellcode generieren, Informationen über die ursprünglichen Zeilennummern und Quelldateien an den generierten F#-Code weitergeben.
Beim Verwenden der #line
-Anweisung müssen Dateinamen in Anführungszeichen gesetzt werden. Sofern das verbatim-Token (@
) nicht am Anfang der Zeichenfolge angezeigt wird, müssen Sie umgekehrte Schrägstriche durch die Verwendung von zwei (und nicht nur einem) umgekehrten Schrägstrichen escapen, um sie im Pfad zu verwenden. Im Folgenden finden Sie gültige Zeilentoken. In diesen Beispielen wird davon ausgegangen, dass die ursprüngliche Script1
-Datei in einer automatisch generierten F#-Codedatei resultiert, wenn er über ein Tool ausgeführt wird, und dass der Code am Speicherort dieser Direktiven aus einigen Token in Zeile 25 in der Datei Script1
generiert wird.
# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"
Diese Token geben an, dass der an diesem Speicherort generierte F#-Code aus einigen Konstrukten in oder in der Nähe der Zeile 25
in Script1
abgeleitet ist.