Condividi tramite


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
#ifsimbolo 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] int string,
#[riga] int verbatim-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#.
#nowarnwarningcode 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.

Vedi anche