Direktivy kompilátoru
Toto téma popisuje direktivy procesoru a direktivy kompilátoru.
Direktivy F# Interactive (dotnet fsi
) najdete v tématu Interaktivní programování s jazykem F#.
Preprocesor – direktivy
Direktiva preprocesoru má předponu symbolu # a zobrazuje se na řádku samostatně. Interpretuje ho preprocesor, který běží před samotným kompilátorem.
Následující tabulka uvádí direktivy preprocesoru, které jsou k dispozici v jazyce F#.
Direktiva | Popis |
---|---|
#if symbol |
Podporuje podmíněnou kompilaci. Kód v oddílu #if za zahrnutím, pokud je symbol definován. Symbol lze také negovat s ! . |
#else |
Podporuje podmíněnou kompilaci. Označí část kódu, která se má zahrnout, pokud není definován symbol použitý s předchozím #if kódem. |
#endif |
Podporuje podmíněnou kompilaci. Označí konec podmíněného oddílu kódu. |
# [řádek] int,# [řádek] int string,# [řádek] int verbatim-string |
Označuje původní řádek zdrojového kódu a název souboru pro ladění. Tato funkce je k dispozici pro nástroje, které generují zdrojový kód jazyka F#. |
#nowarn warningcode |
Zakáže upozornění nebo upozornění kompilátoru. Pokud chcete upozornění zakázat, najděte jeho číslo z výstupu kompilátoru a zahrňte ho do uvozovek. Vynecháte předponu FS. Pokud chcete zakázat více čísel upozornění na stejném řádku, zahrňte každé číslo do uvozovek a jednotlivé řetězce oddělte mezerou. Příklad: #nowarn "9" "40" |
Účinek zakázání upozornění platí pro celý soubor, včetně částí souboru, které předchází direktivě.|
Direktivy podmíněné kompilace
Kód, který je deaktivován jednou z těchto direktiv, se v editoru visual Studio Code zobrazuje šedě.
Poznámka:
Chování direktiv podmíněné kompilace není stejné jako v jiných jazycích. Například nemůžete použít logické výrazy zahrnující symboly a true
false
nemají žádný zvláštní význam. Symboly, které používáte v direktivě if
, musí být definovány příkazovým řádkem nebo v nastavení projektu; neexistuje žádná define
direktiva preprocesoru.
Následující kód znázorňuje použití #if
direktiv , #else
a #endif
direktiv. V tomto příkladu kód obsahuje dvě verze definice function1
. Pokud VERSION1
je definován pomocí parametru -define kompilátoru, je aktivován kód mezi #if
direktivou a direktivou#else
. V opačném případě je kód mezi #else
a #endif
aktivován.
#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
V jazyce F# neexistuje žádná #define
direktiva preprocesoru. K definování symbolů používaných direktivou musíte použít možnost kompilátoru #if
nebo nastavení projektu.
Direktivy podmíněné kompilace lze vnořit. Odsazení není pro direktivy preprocesoru významné.
Můžete také negovat symbol s !
. V tomto příkladu je hodnota řetězce něco jen v případě, že se neladí :
#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif
Direktivy řádků
Při sestavování kompilátor hlásí chyby v kódu jazyka F# odkazováním na čísla řádků, u kterých dojde k každé chybě. Tato čísla řádků začínají na 1 pro první řádek v souboru. Pokud ale generujete zdrojový kód jazyka F# z jiného nástroje, čísla řádků v generovaném kódu se obecně nezajímají, protože chyby ve generovaném kódu F# pravděpodobně vznikají z jiného zdroje. Direktiva #line
poskytuje autorům nástrojů, které generují zdrojový kód jazyka F#, způsob předávání informací o původních číslech řádků a zdrojových souborech do generovaného kódu jazyka F#.
Při použití direktivy #line
musí být názvy souborů uzavřeny do uvozovek. Pokud se před řetězcem nezobrazuje doslovný token (@
), je nutné před řetězcem použít zpětné lomítko pomocí dvou zpětných lomítek namísto jednoho, aby je bylo možné použít v cestě. Následují platné tokeny řádků. V těchtopříkladch kódech předpokládáme, že v těchto příkladech je výsledkem původního souboru Script1
automaticky vygenerovaný automaticky vygenerovaný soubor F# a že kód v umístění těchto direktiv se vygeneruje z některých tokenů na řádku 25 v souboru Script1
.
# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"
Tyto tokeny označují, že kód jazyka F# vygenerovaný v tomto umístění je odvozen z některých konstruktorů na řádku nebo blízko řádku 25
v Script1
.