Directives de compilateur
Cette rubrique décrit les directives de processeur et de compilateur.
Pour les directives F# Interactive (dotnet fsi
) consultez Programmation interactive avec F#.
Directives de préprocesseur
Une directive de préprocesseur est précédée du symbole # et s'affiche toute seule sur une ligne. Elle est interprétée par le préprocesseur, qui s'exécute avant le compilateur lui-même.
Le tableau suivant répertorie les directives de préprocesseur disponibles en F#.
Directive | Description |
---|---|
#if symbole |
Prend en charge la compilation conditionnelle. Le code situé dans la section après le #if est inclus si le symbole est défini. Le symbole peut également être annulé par ! . |
#else |
Prend en charge la compilation conditionnelle. Marque une section de code à inclure si le symbole utilisé avec le #if précédent n'est pas défini. |
#endif |
Prend en charge la compilation conditionnelle. Marque la fin d'une section conditionnelle de code. |
# [ligne] int,# [ligne] chaîne int,# [ligne] intverbatim-string |
Indique la ligne et le nom de fichier du code source d'origine, à des fins de débogage. Cette fonctionnalité est fournie pour les outils qui génèrent du code source F#. |
#nowarn warningcode |
Désactive un ou plusieurs avertissements du compilateur. Pour désactiver plusieurs numéros d’avertissement sur la même ligne, séparez chaque chaîne par un espace. Par exemple : #nowarn 9 42 |
L'effet de la désactivation d'un avertissement s'applique à la totalité du fichier, y compris aux parties du fichier qui précèdent la directive.
Directives de compilation conditionnelle
Le code désactivé par l'une de ces directives apparaît en grisé dans l'éditeur de code de Visual Studio.
Notes
Le comportement des directives de compilation conditionnelle n'est pas le même que dans les autres langages. Par exemple, vous ne pouvez pas utiliser des expressions booléennes qui impliquent des symboles et true
et false
n'ont aucune signification spéciale. Les symboles que vous utilisez dans la directive if
doivent être définis par la ligne de commande ou dans les paramètres du projet ; il n'existe aucune directive de préprocesseur define
.
Le code suivant illustre l'utilisation des directives #if
, #else
et #endif
. Dans cet exemple, le code contient deux versions de la définition de function1
. Quand VERSION1
est défini à l'aide de l'option du compilateur -define, le code entre la directive #if
et la directive #else
est activé. Sinon, le code entre #else
et #endif
est activé.
#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
Il n'existe aucune directive de préprocesseur #define
en F#. Vous devez utiliser l'option du compilateur ou les paramètres du projet pour définir les symboles utilisés par la directive #if
.
Les directives de compilation conditionnelle peuvent être imbriquées. Le retrait n'est pas significatif pour les directives de préprocesseur.
Vous pouvez également annuler un symbole avec !
. Dans cet exemple, la valeur d'une chaîne n'est quelque chose que lorsqu'il n'y a pas de débogage :
#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif
Directives de ligne
Lors de la génération, le compilateur signale les erreurs dans le code F# en référençant les numéros de ligne où chaque erreur se produit. Ces numéros de ligne commencent à 1 pour la première ligne dans un fichier. Toutefois, si vous générez du code source F# à partir d'un autre outil, les numéros de ligne du code généré n'ont en général aucun intérêt, car les erreurs dans le code F# généré proviennent très probablement d'une autre source. La directive #line
offre un moyen aux auteurs d'outils qui génèrent du code source F# de transmettre des informations sur les numéros de ligne et fichiers sources d'origine au code F# généré.
Quand vous utilisez la directive #line
, vous devez placer les noms de fichiers entre guillemets. À moins que le jeton textuel (@
) ne s’affiche devant la chaîne, vous devez utiliser deux barres obliques inverses en tant que caractères d’espacement au lieu d’une pour les utiliser dans le chemin d’accès. Les jetons de ligne valides sont les suivants : Dans ces exemples, supposons que le fichier d'origine Script1
produit un fichier de code F# généré automatiquement quand il est exécuté par l'intermédiaire d'un outil et que le code situé à l'emplacement de ces directives est généré à partir de jetons à la ligne 25 du fichier Script1
.
# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"
Ces jetons indiquent que le code F# généré à cet emplacement dérive de certaines constructions situées à ou près de la ligne 25
dans Script1
.