# Programmation C sharp/Directives du préprocesseur

Le préprocesseur est le traitement effectué par le compilateur pour modifier le fichier source (en mémoire seulement) avant de le compiler. Il permet une compilation conditionnelle (fonctions de deboggage à exclure quand l'application est finalisée, fonctionnalités selon des options, ...), il modifie donc la façon de compiler les fichiers sources.

## Syntaxe générale des directives

Une directive est toujours placée seule sur une ligne de texte et commence par le caractère dièse ( # ). Le premier mot identifie la directive. Il est éventuellement suivi de paramètres.
Exemple :
La directive pragma est suivie des paramètres warning et disable.

## Portée des directives

La portée d'une directive commence à partir de la ligne qui suit cette directive, jusqu'à la fin du fichier source, ou la prochaine contre-directive.

## Avertissements du compilateur

Lors de la compilation, des avertissements sont générés pour attirer le programmeur sur certaines instructions du fichier source potentiellement ambiguës ou dangereuses. Si le programmeur, après vérification de l'endroit indiqué, estime que le danger potentiel ne peut arriver, ou qu'il s'agit bien de ce qu'il faut faire, il est possible d'enlever les avertissements dans une zone du fichier source afin que les avertissements inutiles ne soit plus générés.

### Ignorer un avertissement

Pour ignorer un avertissement, la directive est la suivante :
Où codes est la liste des codes des avertissements à ignorer. Ces codes correspondent à ceux affichés par le compilateur, sans le préfixe "CS".

### Ignorer tous les avertissements

Pour ignorer tous les avertissements, la directive est la même que la précédente, sans aucun code :

### Restaurer un avertissement

Pour restaurer la génération d'un avertissement, c'est à dire ne plus l'ignorer, la directive est la suivante :
Où codes est la liste des codes des avertissements à restaurer.

### Restaurer tous les avertissements

Pour restaurer tous les avertissements, la directive est la même que la précédente, sans aucun code :

## Symboles de compilation

Un symbole est défini avec la directive #define. Il possède un nom mais ne peut prendre de valeur en C#, à la différence d'autres langages comme le C ou le C++.
La syntaxe est la suivante :
Le symbole est défini jusqu'à la fin ou jusqu'à la directive #undef correspondante. La syntaxe de cette directive est la suivante :
Exemple :

## Compilation conditionnelle

La syntaxe générale des directives de compilation conditionnelle est la suivante :
Les blocs #elif et #else sont optionnels.
La condition peut avoir l'une des syntaxes suivantes :

### nom_symbole

    Retourne vrai si le symbole spécifié est défini.

### !condition

    Retourne vrai si la condition est fausse, et vice-versa.

### condition && condition

    Retourne vrai si les deux conditions sont vraies (ET logique).

### condition || condition

    Retourne vrai si au moins l'une des deux conditions est vraie (OU logique).

### (condition)

    Priorité d'évaluation.
La compilation conditionnelle est souvent utilisée pour les fonctions de déboggage. Par exemple :
Pour ce genre de condition, l'attribut Conditionnal est plus simple à utiliser :

## Générer une erreur ou un avertissement

Il est possible qu'une certaine combinaison de symboles n'ait pas de sens, ou ne devrait pas être utilisée. Pour prévenir ce risque, en testant la condition correspondante, il est possible de générer une erreur ou un avertissement à la compilation, en utilisant les directives suivantes :
* Pour générer une erreur :
* Pour générer un avertissement :

## Délimiter une région du code

Délimiter une région sert à regrouper des lignes de codes (méthodes, classes, ...). Les régions de code sont utilisés dans les éditeurs de code spécialisés (Visual Studio, ...) pour permettre leur réduction. Lorsque la région est cachée, trois points de suspension apparaissent à la place des lignes contenues dans la région. Ces lignes apparaissent dans une bulle d'information lorsque le curseur de la souris passe sur ces trois points de suspension.
La syntaxe est la suivante :