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 |
---|---|
#if simbolo |
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] int string, #[riga] int verbatim-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 corrisponde a quello negli 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).