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
#ifSymbol 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] intstring,
#[Zeile] intverbatim-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.
#nowarnWarnungscode 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.

Weitere Informationen