Direttive per il compilatore (F#)

In questo argomento vengono descritte le direttive per il processore e per il compilatore.

Direttive per il preprocessore

Una direttiva per il preprocessore viene preceduta dal simbolo # e visualizzata da sola su una riga.Viene interpretata dal preprocessore, che viene eseguito prima del compilatore stesso.

Nella tabella seguente sono elencate le direttive per il preprocessore disponibili in F#.

Direttiva

Descrizione

#ifsimbolo

Supporta la compilazione condizionale.Il codice nella sezione dopo #if viene incluso se simbolo è definito.

#else

Supporta la compilazione condizionale.Contrassegna una sezione di codice da includere se il simbolo utilizzato 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 il nome file e la riga del codice sorgente originale, per l'esecuzione del debug.Questa funzionalità viene fornita per strumenti che generano codice sorgente F#.

Direttive di compilazione condizionale

Il codice disattivato da una di queste direttive appare in grigio nell'editor del codice di Visual Studio.

[!NOTA]

Il comportamento delle direttive di compilazione condizionale non è analogo a quello in altri linguaggi.Non è ad esempio possibile utilizzare espressioni booleane che includono simboli e true e false non hanno alcun significato speciale.I simboli utilizzati nella direttiva #if devono essere definiti dalla riga di comando o nelle impostazioni del progetto. Non vi è alcuna direttiva #define per il preprocessore.

Nel codice seguente viene illustrato l'utilizzo delle direttive #if, #else e #endif.In questo esempio il codice contiene due versioni della definizione di function1.Quando l'elemento VERSION1 viene definito utilizzando l'opzione del compilatore -define, il codice tra la direttiva #if e la direttiva #else viene attivato.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

In F# non è presente la direttiva #define per il preprocessore.È necessario utilizzare l'opzione del compilatore o le impostazioni del progetto per definire i simboli utilizzati dalla direttiva #if.

Le direttive di compilazione condizionale possono essere annidate.Il rientro non è significativo per le direttive per il preprocessore.

Direttive di riga

Durante la compilazione, il compilatore segnala gli 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.Se, tuttavia, si genera codice sorgente F# da un altro strumento, i numeri di riga nel codice generato non sono generalmente di interesse, perché gli errori nel codice F# generato derivano più probabilmente da altro codice sorgente.La direttiva #line consente agli autori di strumenti che generano codice sorgente F# di passare informazioni sui file di origine e sui numeri di riga originali al codice F# generato.

Quando si utilizza la direttiva #line, i nomi di file devono essere racchiusi tra virgolette.A meno che il token letterale (@) non sia presente all'inizio della stringa, è necessario utilizzare caratteri di escape per i caratteri barra rovesciata inserendo due caratteri barra rovesciata anziché uno per poterli utilizzare nel percorso.Di seguito sono illustrati i token di riga validi.In questi esempi si presupponga che il file originale Script1 restituisca un file di codice F# generato automaticamente quando viene eseguito tramite uno strumento e che il codice in corrispondenza di queste direttive sia generato da 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 in corrispondenza della riga 25 in Script1 o vicino a tale riga.

Direttive per il compilatore

Le direttive per il compilatore assomigliano a quelle per il preprocessore, perché sono precedute da un simbolo #, ma anziché venire interpretate dal preprocessore, vengono interpretate e utilizzate dal compilatore.

Nella tabella seguente è indicata la direttiva per il compilatore disponibile in F#.

Direttiva

Descrizione

#light ["on"|"off"]

Abilita o disabilita sintassi leggera, per garantire la compatibilità con le altre versioni di ML.Per impostazione predefinita, la sintassi leggera è abilitata.La sintassi dettagliata è sempre abilitata.Pertanto, è possibile utilizzare sia sintassi leggera che sintassi dettagliata.La direttiva #light è di per sé equivalente a #light "on".Se si specifica #light "off", è necessario utilizzare sintassi dettagliata per tutti i costrutti di linguaggio.La sintassi nella documentazione relativa a F# viene visualizzata presupponendo che si utilizzi la sintassi leggera.Per ulteriori informazioni, vedere Sintassi dettagliata (F#).

Per le direttive per l'interprete (fsi.exe), vedere Riferimenti per F# Interactive (fsi.exe).

Vedere anche

Altre risorse

Riferimenti per il linguaggio F#

Opzioni del compilatore (F#)