Partager via


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
#ifsymbole 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#.
#nowarnwarningcode 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.

Voir aussi