Direttive per il compilatore
In questo argomento vengono descritte le direttive per il preprocessore e le direttive del compilatore.
Per le direttive F# Interactive (dotnet fsi
), vedere Programmazione interattiva con F#.
Direttive per il preprocessore
Una direttiva per il preprocessore è preceduta dal simbolo # e viene visualizzata in una riga da sola. Viene interpretata dal preprocessore, che viene eseguito prima del compilatore stesso.
Nella tabella riportata di seguito sono elencate le direttive per il preprocessore disponibili in F#.
Direttiva | Descrizione |
---|---|
#if Simbolo |
Supporta la compilazione condizionale. Codice nella sezione dopo che #if è incluso se il simbolo è definito. Il simbolo può anche essere negato con ! . |
#else |
Supporta la compilazione condizionale. Contrassegna una sezione di codice da includere se il simbolo usato nella precedente direttiva #if non è definito. |
#endif |
Supporta la compilazione condizionale. Contrassegna la fine di una sezione condizionale di codice. |
# [riga] int,# [riga] intstring,# [riga] intverbatim-string |
Indica la riga e il nome di file del codice sorgente originale per il debug. Questa funzionalità viene fornita per gli strumenti che generano codice sorgente F#. |
#nowarn warningcode |
Disabilita un avviso o più avvisi del compilatore. Per disabilitare un avviso, individuare il numero dall'output del compilatore e includerlo tra virgolette. Omettere il prefisso "FS". Per disabilitare più numeri di avviso sulla stessa riga, racchiudere ogni numero tra virgolette e separare ogni stringa con uno spazio. Ad esempio: #nowarn "9" "40" |
L'effetto della disabilitazione di un avviso si applica all'intero file, incluse parti del file che precedono la direttiva.|
Direttive di compilazione condizionale
Il codice disattivato da una di queste direttive viene visualizzato in grigio nell'editor di Visual Studio Code.
Nota
Il comportamento delle direttive di compilazione condizionale non è lo stesso come in altri linguaggi. Ad esempio, è possibile usare espressioni booleane che includono simboli e true
e false
non hanno alcun significato speciale. I simboli usati nella direttiva if
devono essere definiti dalla riga di comando o nelle impostazioni del progetto e non esiste alcuna direttiva per il preprocessore define
.
Nel codice di esempio che segue viene illustrato l'uso delle direttive #if
, #else
e #endif
. In questo esempio, il codice contiene due versioni della definizione di function1
. Quando VERSION1
viene definito usando l'opzione del compilatore -define, viene attivato il codice tra la #if
direttiva e la #else
direttiva . In caso contrario, viene attivato il codice tra #else
e #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
Non esiste alcuna direttiva per il preprocessore #define
in F#. È necessario usare l'opzione del compilatore o le impostazioni di progetto per definire i simboli usati per la direttiva #if
.
Le direttive di compilazione condizionale possono essere annidate. Il rientro non è significativo per le direttive per il preprocessore.
È anche possibile negare un simbolo con !
. In questo esempio il valore di una stringa è qualcosa solo quando non si esegue il debug:
#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif
Direttive di riga
Durante la compilazione, il compilatore segnala errori nel codice F# facendo riferimento ai numeri di riga in cui si verifica ogni errore. Questi numeri di riga iniziano da 1 per la prima riga in un file. Tuttavia, se si genera codice sorgente F# da un altro strumento, i numeri di riga nel codice generato non sono generalmente di interesse, perché nel codice F# generato probabilmente gli errori sono causati da un'altra origine. La direttiva #line
consente agli autori di strumenti che generano codice sorgente F# di passare le informazioni relative ai numeri di riga e ai file di origine originali al codice F# generato.
Quando si usa la direttiva #line
, i nomi di file devono essere racchiusi tra virgolette. A meno che il token verbatim (@
) venga visualizzato all'inizio della stringa, è necessario eseguire l'escape dei caratteri barra rovesciata usando due barre rovesciate anziché una per poterli usare nel percorso. Di seguito sono riportati dei token di riga validi. In questi esempi si presuppone che il file originale Script1
risulti in un file di codice F# generato automaticamente quando viene eseguito tramite uno strumento e che il codice nella posizione di tali direttive venga generato dagli stessi token alla riga 25 nel file Script1
.
# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"
Questi token indicano che il codice F# generato in questa posizione è derivato da alcuni costrutti alla riga o vicino alla riga 25
in Script1
.