Maîtriser les directives de préprocesseur C# : compilation conditionnelle
Les directives de préprocesseur donnent des instructions au compilateur pour prétraiter l'information avant la compilation réelle.
Toutes commencent par #, seules des espaces blancs peuvent les précéder sur une ligne. Ce ne sont pas des instructions (pas de point-virgule). C# n'a pas de préprocesseur séparé, mais traite les directives comme s'il y en avait un. Elles servent à la compilation conditionnelle (pas de macros comme en C/C++).
Directives disponibles
| # | Directive & Description |
|---|---|
| 1 | #define : définit un symbole (suite de caractères) |
| 2 | #undef : annule la définition d'un symbole |
| 3 | #if : teste si un symbole évalue à true |
| 4 | #else : alternative dans directive conditionnelle |
| 5 | #elif : else-if pour directives conditionnelles |
| 6 | #endif : termine une directive conditionnelle |
| 7 | #line : modifie numéro de ligne et nom fichier pour erreurs/avertissements |
| 8 | #error : génère une erreur à un emplacement précis |
| 9 | #warning : génère un avertissement niveau 1 |
| 10 | #region : bloc repliable dans Visual Studio |
| 11 | #endregion : fin d'un bloc #region |
Directive #define
Crée des constantes symboliques. Utilisé avec #if pour évaluer à true.
#define SYMBOLE
Exemple
#define PI
using System;
namespace ApplicationPreprocesseur
{
class Programme
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine("PI est défini");
#else
Console.WriteLine("PI n'est pas défini");
#endif
Console.ReadKey();
}
}
}
Résultat : PI est défini
Directives conditionnelles
#if permet de créer des directives conditionnelles. Utiles pour builds debug ou configurations spécifiques.
Syntaxe : #if symbole [opérateur symbole]...
Opérateurs : ==, !=, &&, ||. Groupement par parenthèses possible.
Tout #if doit se terminer par #endif.
Exemple
#define DEBUG
#define VC_V10
using System;
public class ClasseTest
{
public static void Main()
{
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG est défini");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 est défini");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG et VC_V10 sont définis");
#else
Console.WriteLine("DEBUG et VC_V10 ne sont pas définis");
#endif
Console.ReadKey();
}
}
Résultat : DEBUG et VC_V10 sont définis
Bonnes pratiques
- Utilisez
#region/#endregionpour organiser le code dans l'éditeur #erroret#warningpour valider configurations de build- Évitez l'abus de compilation conditionnelle qui complexifie la maintenance
Langue C
- C# Hello World — Construire votre première application C#
- Comprendre les mots-clés et identificateurs C# : règles, listes et bonnes pratiques
- Maîtriser les variables C# et types de données primitifs : guide complet
- Opérateurs C# — Guide complet des opérateurs en C#
- Maîtriser les opérateurs bit à bit et de décalage en C# : Guide complet
- Fondamentaux C# : Entrées et sorties essentielles
- Expressions, instructions et blocs C# : Guide complet avec exemples pratiques
- Maîtriser les commentaires C# : Types, bonnes pratiques et documentation XML
- Maîtriser l'instruction Switch C# : Syntaxe, exemples et bonnes pratiques