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 |
---|---|
#if
symbool |
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. |
#nowarn
waarschuwingscode |
Hiermee schakelt u een compilerwaarschuwing of waarschuwingen uit. Als u meerdere waarschuwingsnummers op dezelfde regel wilt uitschakelen, scheidt u elke tekenreeks door een spatie. Bijvoorbeeld: #nowarn 9 42 |
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 true
false
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
, #else
en #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
.