Compilerdirektiven (F#)
In diesem Thema werden Prozessordirektiven und Compilerdirektiven beschrieben.
Präprozessordirektiven
Einer Präprozessordirektive wird das #-Symbol vorangestellt, und sie ist in einer eigenen Zeile angeordnet. Sie wird vom Präprozessor interpretiert, der vor dem Compiler ausgeführt wird.
In der folgenden Tabelle sind die in F# verfügbaren Präprozessordirektiven aufgeführt.
Direktive |
Beschreibung |
---|---|
#if-Symbol |
Unterstützt bedingte Kompilierung. Code im Abschnitt nach #if wird eingeschlossen, wenn das Symbol definiert ist. |
#else |
Unterstützt bedingte Kompilierung. Markiert einen Codeabschnitt, der eingeschlossen wird, wenn das mit dem vorherigen #if verwendete Symbol nicht definiert ist. |
#endif |
Unterstützt bedingte Kompilierung. Markiert das Ende eines bedingten Codeabschnitts. |
#[Zeile] int, #[Zeile] int string, #[Zeile] int verbatim-string |
Gibt die Zeile und den Dateinamen des ursprünglichen Quellcodes für Debuggingzwecke an. Diese Funktion wird für Tools bereitgestellt, die F#-Quellcode generieren. |
Direktiven für die bedingte Kompilierung
Code, der durch eine dieser Direktiven deaktiviert wird, ist im Visual Studio-Code-Editor abgeblendet.
Tipp
Das Verhalten der Direktiven für die bedingte Kompilierung weicht vom Verhalten in anderen Sprachen ab. Beispielsweise können Sie keine booleschen Ausdrücke mit Symbolen verwenden, und true und false haben keine spezielle Bedeutung. Symbole, die Sie in der #if-Direktive verwenden, müssen in der Befehlszeile oder in den Projekteinstellungen definiert werden, und es gibt keine #define-Präprozessordirektive.
Im folgenden Code wird die Verwendung der Direktiven #if, #else und #endif veranschaulicht. In diesem Beispiel enthält der Code zwei Versionen der Definition von function1. Wenn VERSION1 mit der Compileroption -define definiert wird, wird der Code zwischen der #if-Direktive und der #else-Direktive 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
In F# gibt es keine #define-Präprozessordirektive. Sie müssen die von der #if-Direktive verwendeten Symbole mithilfe der Compileroption oder der Projekteinstellungen definieren.
Direktiven für die bedingte Kompilierung können geschachtelt werden. Einzüge sind für Präprozessordirektiven ohne Bedeutung.
Zeilendirektiven
Der Compiler meldet während der Erstellung Fehler in F#-Code durch Verweise auf die jeweilige Nummer der Zeile, in der die einzelnen 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 mit hoher Wahrscheinlichkeit aus einer anderen Quelle stammen. Die #line-Direktive ermöglicht Autoren von Tools, die F#-Quellcode generieren, Informationen zu den ursprünglichen Zeilennummern und Quelldateien an den generierten F#-Code zu übergeben.
Wenn Sie die #line-Direktive verwenden, müssen Dateinamen in Anführungszeichen eingeschlossen werden. Sofern der Zeichenfolge nicht das Verbatim-Token (@) vorangestellt ist, müssen Sie umgekehrte Schrägstriche mit einem Escapezeichen versehen, indem Sie statt eines umgekehrten Schrägstrichs zwei umgekehrte Schrägstriche angeben, um sie im Pfad zu verwenden. Die folgenden Zeilentoken sind gültig. In diesen Beispielen wird angenommen, dass die ursprüngliche Datei Script1 eine automatisch generierte F#-Codedatei ergibt, wenn sie in einem Tool verarbeitet wird, und dass der Code an dieser Position dieser Direktiven von einigen Token in Zeile 25 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\"
Die Token geben an, dass der an dieser Position generierte F#-Code von Konstrukten in Zeile 25 (oder in der Nähe der Zeile) der Datei Script1 abgeleitet wird.
Compilerdirektiven
Compilerdirektiven ähneln Präprozessordirektiven, da ihnen das #-Zeichen vorangestellt ist. Sie werden jedoch nicht vom Präprozessor interpretiert, sondern ihre Interpretation und Behandlung erfolgt durch den Compiler.
Die folgende Tabelle enthält die in F# verfügbare Compilerdirektive.
Direktive |
Beschreibung |
---|---|
#light ["on"|"off"] |
Aktiviert oder deaktiviert die Kompatibilität der einfachen Syntax mit anderen Versionen von ML. Die einfache Syntax ist standardmäßig aktiviert. Ausführliche Syntax wird immer aktiviert. Sie können daher sowohl einfache Syntax als auch ausführliche Syntax verwenden. Die #light-Direktive allein entspricht #light "on". Wenn Sie #light "off" angeben, müssen Sie für alle Sprachkonstrukte die ausführliche Syntax verwenden. In der Darstellung der Syntax in der Dokumentation für F# wird vorausgesetzt, dass Sie einfache Syntax verwenden. Weitere Informationen finden Sie unter Ausführliche Syntax (F#). |
Informationen zu Interpreterdirektiven (fsi.exe) finden Sie unter F# Interactive-Referenz (fsi.exe).