Compilerrichtlijnen

In dit onderwerp worden processorrichtlijnen en compilerrichtlijnen beschreven.

Zie Interactive Programming met F# voor F# Interactive(dotnet fsi)-instructies.

Preprocessorrichtlijnen

Een preprocessor-instructie wordt voorafgegaan door het #-symbool en wordt op een regel zelf weergegeven. Het wordt geïnterpreteerd door de preprocessor, die wordt uitgevoerd vóór de compiler zelf.

De volgende tabel bevat de preprocessorrichtlijnen die beschikbaar zijn in F#.

Richtlijn Beschrijving
#ifSymbool Ondersteunt voorwaardelijke compilatie. Code in de sectie nadat het #if is opgenomen als het symbool is gedefinieerd. Het symbool kan ook worden ontkend met !.
#else Ondersteunt voorwaardelijke compilatie. Hiermee markeert u een codesectie die moet worden opgenomen als het symbool dat met de vorige #if is gebruikt, niet is gedefinieerd.
#endif Ondersteunt voorwaardelijke compilatie. Hiermee wordt het einde van een voorwaardelijke sectie van de code gemarkeerd.
#[regel] int,
#[regel] int-tekenreeks,
#[regel] intverbatim-string
Geeft de oorspronkelijke broncoderegel en bestandsnaam aan voor foutopsporing. Deze functie is beschikbaar voor hulpprogramma's die F#-broncode genereren.
#nowarnwaarschuwingscode Hiermee schakelt u een compilerwaarschuwing of waarschuwingen uit. Als u een waarschuwing wilt uitschakelen, zoekt u het nummer van de compileruitvoer en neemt u deze op tussen aanhalingstekens. Laat het voorvoegsel 'FS' weg. Als u meerdere waarschuwingsnummers op dezelfde regel wilt uitschakelen, neemt u elk getal tussen aanhalingstekens op en scheidt u elke tekenreeks door een spatie.
Bijvoorbeeld: #nowarn "9" "40"

Het effect van het uitschakelen van een waarschuwing is van toepassing op het hele bestand, inclusief delen van het bestand dat voorafgaat aan de richtlijn.|

Richtlijnen voor voorwaardelijke compilatie

Code die door een van deze instructies is gedeactiveerd, wordt grijs weergegeven in de Visual Studio Code-editor.

Notitie

Het gedrag van de voorwaardelijke compilatierichtlijnen is niet hetzelfde als in andere talen. U kunt bijvoorbeeld geen Boole-expressies gebruiken met symbolen en truefalse hebben geen speciale betekenis. Symbolen die u in de if richtlijn gebruikt, moeten worden gedefinieerd door de opdrachtregel of in de projectinstellingen. Er is geen define preprocessorrichtlijn.

De volgende code illustreert het gebruik van de #if, #elseen #endif instructies. In dit voorbeeld bevat de code twee versies van de definitie van function1. Wanneer VERSION1 wordt gedefinieerd met behulp van de optie -define compiler, wordt de code tussen de #if richtlijn en de #else richtlijn geactiveerd. Anders wordt de code tussen #else en #endif geactiveerd.

#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

Er is geen #define preprocessorrichtlijn in F#. U moet de compileroptie of projectinstellingen gebruiken om de symbolen te definiëren die door de #if instructie worden gebruikt.

Voorwaardelijke compilatierichtlijnen kunnen worden genest. Inspringing is niet belangrijk voor preprocessorrichtlijnen.

U kunt ook een symbool !met . In dit voorbeeld is de waarde van een tekenreeks alleen iets wanneer er geen foutopsporing wordt uitgevoerd:

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

Regelrichtlijnen

Bij het bouwen rapporteert de compiler fouten in F#-code door te verwijzen naar regelnummers waarop elke fout optreedt. Deze regelnummers beginnen bij 1 voor de eerste regel in een bestand. Als u echter F#-broncode genereert vanuit een ander hulpprogramma, zijn de regelnummers in de gegenereerde code over het algemeen niet van belang, omdat de fouten in de gegenereerde F#-code waarschijnlijk ontstaan uit een andere bron. De #line richtlijn biedt een manier voor auteurs van hulpprogramma's die F#-broncode genereren om informatie over de oorspronkelijke regelnummers en bronbestanden door te geven aan de gegenereerde F#-code.

Wanneer u de #line instructie gebruikt, moeten bestandsnamen tussen aanhalingstekens staan. Tenzij het exacte token (@) voor de tekenreeks wordt weergegeven, moet u backslashtekens escapen door twee backslashtekens te gebruiken in plaats van één om ze in het pad te kunnen gebruiken. Hier volgen geldige regeltokens. In deze voorbeelden wordt ervan uitgegaan dat het oorspronkelijke bestand Script1 resulteert in een automatisch gegenereerd F#-codebestand wanneer het wordt uitgevoerd via een hulpprogramma en dat de code op de locatie van deze instructies wordt gegenereerd op basis van sommige tokens op regel 25 in het bestand Script1.

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

Deze tokens geven aan dat de F#-code die op deze locatie wordt gegenereerd, is afgeleid van een aantal constructies op of in de buurt van de regel 25 in Script1.

Zie ook