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 |
---|---|
#if symbol |
Stöder villkorlig kompilering. Kod i avsnittet efter att har #if inkluderats om symbolen har 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] int verbatim-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. |
#nowarn warningcode |
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 true
false
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
, #else
och #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
.