Udostępnij za pośrednictwem


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).

Zobacz też

Inne zasoby

Materiały referencyjne dotyczące języka F#

Opcje kompilatora (F#)