Dyrektywy kompilatora (F#)
W tym temacie opisano procesor dyrektywy i dyrektyw kompilatora.
Dyrektywy preprocesora
Dyrektywy preprocesora jest prefiksem symbolu # i pojawia się w wierszu samodzielnie.Jest interpretowany przez preprocesora, która jest uruchamiana przed kompilatora, sam.
Poniższa lista zawiera dyrektywy preprocesora, które są dostępne w F#.
Dyrektywy |
Opis |
---|---|
#ifsymbol |
Obsługuje kompilacji warunkowej.Kod w sekcji po #if jest włączone, jeśli symbol jest zdefiniowany. |
#else |
Obsługuje kompilacji warunkowej.Znaki sekcji Kodeksu obejmują użycie symbolu z poprzednich #if nie jest zdefiniowany. |
#endif |
Obsługuje kompilacji warunkowej.Znaczniki końca warunkowego sekcji kodu. |
#[line] int, #[line] intstring, #[line]intverbatim-string |
Wskazuje oryginalne źródło kodu linii i nazwę pliku, do debugowania.Jest to funkcja dostępna dla narzędzi generujących kod źródłowy F#. |
Dyrektyw warunkowych kompilacji
Kod, który jest zdezaktywowany przez jedną z tych dyrektyw wygaszone w Visual Studio Edytor kodu.
[!UWAGA]
Zachowanie dyrektyw kompilacji warunkowej nie jest taka sama jak w innych językach.Na przykład, nie można użyć wyrażenia boolowskie obejmujące symbole, i true i false im przypisane żadne znaczenie specjalne.Symbole używane w #if dyrektywy muszą być zdefiniowane za pomocą wiersza polecenia lub w ustawieniach projektu; nie ma żadnych #define dyrektywy preprocesora.
Poniższy kod ilustruje użycie #if, #else, i #endif dyrektyw.W tym przykładzie kod zawiera dwie wersje definicji function1.Gdy VERSION1 jest definiowana za pomocą -określić opcję kompilatora, kod między #if dyrektywy oraz #else dyrektywy jest aktywowany.W przeciwnym razie kod między #else i #endif jest aktywowany.
#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
Nie ma żadnych #define dyrektywa preprocesora # F.Ustawienia opcji lub projektu kompilator musi służą do definiowania symboli używanych przez #if dyrektywy.
Można zagnieżdżać dyrektyw kompilacji warunkowej.Wcięcia nie ma znaczenia dla dyrektywy preprocesora.
Linia dyrektyw
Podczas konstruowania, kompilator zgłasza błędy w kodzie F# odwołując się do numerów wierszy, w którym występuje każdego błędu.Te numery wierszy rozpoczynają się od 1 dla pierwszego wiersza w pliku.Jednak przypadku generowania kodu źródłowego F# z innego narzędzia, numery linii w generowanym kodzie ogólnie nie są interesu, ponieważ błędy w wygenerowanym F# kodzie najprawdopodobniej wynikają z innego źródła.#line Dyrektywa przewiduje sposób autorów narzędzi generujących kod źródłowy F# do przekazywania informacji na temat wiersza oryginalne numery i źródło plików do wygenerowanego kodu F#.
Kiedy używać #line w dyrektywie, nazwy plików muszą być ujęte w cudzysłów.Chyba że verbatim token (@) pojawia się na początku ciągu, musi escape odwróconej kreski, za pomocą dwa znaki odwrotnej kreski ukośnej zamiast jednego z ich używać w ścieżce.Poniżej przedstawiono tokeny nieprawidłowy wiersz.W tych przykładach założono, że oryginalny plik Script1 wyników w automatycznie wygenerowanym pliku kodu F#, gdy jest uruchamiany przy użyciu narzędzia i kod lokalizacji tych dyrektyw jest generowany na podstawie niektórych tokenów w wierszu 25 w pliku Script1.
# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 \@\"C:\Projects\MyProject\MyProject\Script1\"
Tokeny te wskazują, że kod F# generowane w tym miejscu jest pochodną pewne konstrukcje w poziomie lub blisko linii 25 w Script1.
Dyrektyw kompilatora
Dyrektyw kompilatora przypominają dyrektywy preprocesora, ponieważ są one prefiksem w komentarzu, ale zamiast interpretowane przez preprocesora są pozostawiane dla kompilatora do interpretowania i działać na.
Poniższa lista zawiera dyrektywy kompilatora, który jest dostępny w F#.
Dyrektywy |
Opis |
---|---|
#light["na" | "off"] |
Włącza lub wyłącza lekkie składnię, dla zachowania zgodności z innymi wersjami ML.Domyślnie włączone jest lekkie składni.Verbose składnia jest zawsze włączone.W związku z tym można użyć zarówno lekkie składni i pełnej składni.Dyrektywy #light przez sam jest równoważne z #light "on".Jeśli określisz #light "off", należy użyć pełnej składni dla wszystkich konstrukcji językowych.Składnia w dokumentacji dla F# jest przedstawiona przy założeniu, że są przy użyciu składni lekkie.Aby uzyskać więcej informacji, zobacz Pełna składnia (F#). |
Dyrektyw interpretera (fsi.exe), zobacz Odwołanie interakcyjne F# (fsi.exe).