Dela via


Kompilatordirektiv

Det här avsnittet beskriver processordirektiv och kompilatordirektiv.

För F# Interaktiva (dotnet fsi) direktiv, se Interaktiv programmering med F#.

Förprocessordirektiv

Ett preprocessordirektiv prefixeras med #-symbolen och visas på en rad av sig själv. Den tolkas av förprocessorn, som körs före själva kompilatorn.

I följande tabell visas de förprocessordirektiv som är tillgängliga i F#.

Direktiv beskrivning
#ifSymbol Stöder villkorlig kompilering. Kod i avsnittet efter att har #if inkluderats om symbolenhar definierats. Symbolen kan också negeras med !.
#else Stöder villkorlig kompilering. Markerar ett kodavsnitt som ska inkluderas om symbolen som används med föregående #if inte har definierats.
#endif Stöder villkorlig kompilering. Markerar slutet på ett villkorsstyrt kodavsnitt.
#[rad] int,
#[rad] int-sträng,
#[rad] intverbatim-string
Anger den ursprungliga källkodsraden och filnamnet för felsökning. Den här funktionen tillhandahålls för verktyg som genererar F#-källkod.
#nowarnwarningcode Inaktiverar en kompilatorvarning eller varningar. Om du vill inaktivera en varning letar du reda på dess nummer från kompilatorns utdata och tar med det inom citattecken. Utelämna prefixet "FS". Om du vill inaktivera flera varningsnummer på samma rad tar du med varje tal inom citattecken och avgränsar varje sträng med ett blanksteg.
Till exempel: #nowarn "9" "40"

Effekten av att inaktivera en varning gäller för hela filen, inklusive delar av filen som föregår direktivet.|

Direktiv för villkorlig kompilering

Kod som inaktiveras av något av dessa direktiv visas nedtonad i Visual Studio Code-redigeraren.

Kommentar

Beteendet för direktiven för villkorsstyrd kompilering är inte detsamma som på andra språk. Du kan till exempel inte använda booleska uttryck som involverar symboler och truefalse inte har någon särskild betydelse. Symboler som du använder i if direktivet måste definieras av kommandoraden eller i projektinställningarna. Det finns inget define förprocessordirektiv.

Följande kod illustrerar användningen av direktiven #if, #elseoch #endif . I det här exemplet innehåller koden två versioner av definitionen av function1. När VERSION1 definieras med hjälp av kompilatoralternativet -define aktiveras koden mellan #if direktivet och #else direktivet. Annars aktiveras koden mellan #else och #endif .

#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

Det finns inget #define förprocessordirektiv i F#. Du måste använda kompilatoralternativet eller projektinställningarna för att definiera de symboler som används av #if direktivet.

Villkorliga kompileringsdirektiv kan kapslas. Indrag är inte signifikant för förprocessordirektiv.

Du kan också negera en symbol med !. I det här exemplet är en strängs värde bara något när du inte felsöker:

#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif

Linjedirektiv

När du skapar rapporterar kompilatorn fel i F#-kod genom att referera till radnummer där varje fel inträffar. Dessa radnummer börjar vid 1 för den första raden i en fil. Men om du genererar F#-källkod från ett annat verktyg är radnumren i den genererade koden vanligtvis inte av intresse, eftersom felen i den genererade F#-koden troligen uppstår från en annan källa. Direktivet #line tillhandahåller ett sätt för författare av verktyg som genererar F#-källkod att skicka information om de ursprungliga radnumren och källfilerna till den genererade F#-koden.

När du använder #line direktivet måste filnamn omges av citattecken. Om inte den ordagranna token (@) visas framför strängen måste du undvika omvänt snedstreck genom att använda två omvänt snedstreck i stället för ett för att kunna använda dem i sökvägen. Följande är giltiga radtoken. I de här exemplen antar du att den ursprungliga filen Script1 resulterar i en automatiskt genererad F#-kodfil när den körs via ett verktyg och att koden på platsen för dessa direktiv genereras från vissa token på rad 25 i filen Script1.

# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"

Dessa token anger att F#-koden som genereras på den här platsen härleds från vissa konstruktioner på eller nära rad 25 i Script1.

Se även