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
#ifSymbol 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] intstring,
#[řádek] intverbatim-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#.
#nowarnwarningcode 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 truefalse 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í #ifdirektiv , #elsea #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.

Viz také