Directives du préprocesseur C#
Directives du préprocesseur C#
Dans ce didacticiel, nous découvrirons les directives de préprocesseur, les directives disponibles en C#, et quand, pourquoi et comment elles sont utilisées.
Comme son nom l'indique, les directives du préprocesseur sont un bloc d'instructions qui est traité avant le début de la compilation proprement dite. Les directives du préprocesseur C# sont les commandes du compilateur qui affectent le processus de compilation.
Ces commandes spécifient les sections du code à compiler ou comment gérer des erreurs et des avertissements spécifiques.
La directive du préprocesseur C# commence par un # (hash) symbole et toutes les directives du préprocesseur durent une ligne. Les directives du préprocesseur se terminent par new line plutôt que semicolon .
Les directives de préprocesseur disponibles en C# sont :
| Directive du préprocesseur | Description | Syntaxe |
|---|---|---|
#if | Vérifie si une expression de préprocesseur est vraie ou non | #if preprocessor-expression code to compile #endif |
#elif | Utilisé avec #if pour vérifier plusieurs expressions de préprocesseur | #if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code to compile #endif |
#else | Utilisé avec #if pour créer une directive conditionnelle composée. | #if preprocessor-expression code to compile #elif code to compile #endif |
#endif | Utilisé avec #if pour indiquer la fin d'une instruction conditionnelle | #if preprocessor-expression code to compile #endif |
#define | Utilisé pour définir un symbole | #define SYMBOL |
#undef | Utilisé pour indéfinir un symbole | #undef SYMBOL |
#warning | Nous permet de générer un avertissement de niveau 1 à partir de notre code | #warning warning-message |
#error | Nous permet de générer une erreur à partir de notre code | #error error-message |
#line | Nous permet de modifier le numéro de ligne et le nom de fichier du compilateur pour afficher les erreurs et les avertissements | #line line-number file-name |
#region | Nous permet de créer une région qui peut être développée ou réduite lors de l'utilisation d'un éditeur de code Visual Studio | #region region-description codes #endregion |
#endregion | Indique la fin d'une région | #region region-description codes #endregion |
#pragma | Donne au compilateur des instructions spéciales pour la compilation du fichier dans lequel il apparaît. | #pragma pragma-name pragma-arguments |
#définir la directive
- Le
#definedirective nous permet de définir un symbole. - Symboles définis lorsqu'ils sont utilisés avec
#ifdirective sera évaluée à true. - Ces symboles peuvent être utilisés pour spécifier les conditions de compilation.
- Syntaxe :
#define SYMBOL
- Par exemple :
#define TESTING
Ici, TESTER est un symbole.
Directive #undef
- Le
#undefdirective nous permet d'indéfinir un symbole. - Symboles non définis lorsqu'ils sont utilisés avec
#ifdirective sera évaluée comme fausse. - Syntaxe :
#undef SYMBOL
- Par exemple :
#undef TESTING
Ici, TESTER est un symbole.
Directive #if
- Le
#ifsont utilisées pour tester l'expression du préprocesseur. - Une expression de préprocesseur peut se composer d'un symbole uniquement ou d'une combinaison de symboles avec des opérateurs tels que
&&(ET),||(OU),!(PAS). #ifest suivie d'un#endifdirective.- Les codes à l'intérieur du
#ifdirective n'est compilée que si l'expression est testée avec#ifest évalué à vrai. - Syntaxe :
#if preprocessor-expression code to compile< #endif
- Par exemple :
#if TESTING Console.WriteLine("Currently Testing"); #endif
Exemple 1 :Comment utiliser la directive #if ?
#define CSHARP
using System;
namespace Directive
{
class ConditionalDirective
{
public static void Main(string[] args)
{
#if (CSHARP)
Console.WriteLine("CSHARP is defined");
#endif
}
}
}
Lorsque nous exécutons le programme, la sortie sera :
CSHARP is defined
Dans le programme ci-dessus, CSHARP le symbole est défini en utilisant le #define directive au début du programme. À l'intérieur du Main() méthode, #if est utilisée pour tester si CSHARP est vrai ou non. Le bloc de code à l'intérieur de #if directive est compilée uniquement si CSHARP est défini.
Instruction #elif
- Le
#elifest utilisée avec la directive #if qui nous permet de créer une directive conditionnelle composée. - Il est utilisé lors du test de plusieurs expressions de préprocesseur.
- Les codes à l'intérieur du
#elifdirective est compilée uniquement si l'expression testée avec ce#elifest évalué à vrai. - Syntaxe :
#if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #endif
- Par exemple :
#if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #endif
Instruction #else
- Le
#elsedirective est utilisée avec#ifdirective. - Si aucune des expressions dans le
#ifprécédent et#elif(le cas échéant) les directives sont vraies, les codes à l'intérieur du#elsesera compilée. - Syntaxe :
#if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #else code-to-compile #endif
- Par exemple :
#if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #else Console.WriteLine("Neither Testing nor Training"); #endif
Instruction #endif
- Le
#endifdirective est utilisée avec#ifdirective pour indiquer la fin de#ifdirective. - Syntaxe :
#if preprocessor-expression-1 code to compile #endif
- Par exemple :
#if TESTING Console.WriteLine("Currently Testing"); #endif
Exemple 2 :Comment utiliser la directive conditionnelle (if, elif, else, endif) ?
#define CSHARP
#undef PYTHON
using System;
namespace Directive
{
class ConditionalDirective
{
static void Main(string[] args)
{
#if (CSHARP && PYTHON)
Console.WriteLine("CSHARP and PYTHON are defined");
#elif (CSHARP && !PYTHON)
Console.WriteLine("CSHARP is defined, PYTHON is undefined");
#elif (!CSHARP && PYTHON)
Console.WriteLine("PYTHON is defined, CSHARP is undefined");
#else
Console.WriteLine("CSHARP and PYTHON are undefined");
#endif
}
}
} Lorsque nous exécutons le programme, la sortie sera :
CSHARP is defined, PYTHON is undefined
Dans cet exemple, nous pouvons voir l'utilisation de #elif et #else directif. Ces directives sont utilisées lorsqu'il y a plusieurs conditions à tester. De plus, les symboles peuvent être combinés à l'aide d'opérateurs logiques pour former une expression de préprocesseur.
#instruction d'avertissement
- Le
#warningnous permet de générer un avertissement de niveau un défini par l'utilisateur à partir de notre code. - Syntaxe :
#warning warning-message
- Par exemple :
#warning This is a warning message
Exemple 3 :Comment utiliser la directive #warning ?
using System;
namespace Directives
{
class WarningDirective
{
public static void Main(string[] args)
{
#if (!CSHARP)
#warning CSHARP is undefined
#endif
Console.WriteLine("#warning directive example");
}
}
}
Lorsque nous exécutons le programme, la sortie sera :
Program.cs(10,26): warning CS1030: #warning: 'CSHARP is undefined' [/home/myuser/csharp/directives-project/directives-project.csproj] #warning directive example
Après avoir exécuté le programme ci-dessus, nous verrons la sortie comme ci-dessus. Le texte représente un message d'avertissement. Ici, nous générons un message d'avertissement défini par l'utilisateur en utilisant le #warning directives.
Notez que les instructions après le #warning directive sont également exécutées. Cela signifie que le #warning ne met pas fin au programme, mais envoie simplement un avertissement.
#instruction d'erreur
- Le
#errornous permet de générer une erreur définie par l'utilisateur à partir de notre code. - Syntaxe :
#error error-message
- Par exemple :
#error This is an error message
Exemple 4 :Comment utiliser la directive #error ?
using System;
namespace Directive
{
class Error
{
public static void Main(string[] args)
{
#if (!CSHARP)
#error CSHARP is undefined
#endif
Console.WriteLine("#error directive example");
}
}
}
Lorsque nous exécutons le programme, la sortie sera :
Program.cs(10,24): error CS1029: #error: 'CSHARP is undefined' [/home/myuser/csharp/directives-project/directives-project.csproj] The build failed. Please fix the build errors and run again.
Nous verrons quelques erreurs, probablement comme ci-dessus. Ici, nous générons une erreur définie par l'utilisateur.
Une autre chose à noter ici est que le programme sera terminé et la ligne #error directive example ne sera pas imprimé comme il l'était dans le #warning directives.
Instruction #line
- Le
#linenous permet de modifier le numéro de ligne et le nom du fichier pour les erreurs et les avertissements. - Syntaxe :
#line line-number file-name
- Par exemple :
#line 50 "fakeprogram.cs"
Exemple 5 :Comment utiliser la directive #line ?
using System;
namespace Directive
{
class Error
{
public static void Main(string[] args)
{
#line 200 "AnotherProgram.cs"
#warning Actual Warning generated by Program.cs on line 10
}
}
}
Lorsque nous exécutons le programme, la sortie sera :
AnotherProgram.cs(200,22): warning CS1030: #warning: 'Actual Warning generated by Program.cs on line 10' [/home/myuser/csh arp/directive-project/directive-project.csproj]
Nous avons enregistré l'exemple ci-dessus sous le nom Program.cs . L'avertissement a en fait été généré à line 10 par Program.cs . Utilisation du #line directive, nous avons changé le numéro de ligne en 200 et le nom du fichier en AnotherProgram.cs qui a généré l'erreur.
Instruction #region et #endregion
- Le
#regionnous permet de créer une région qui peut être développée ou réduite lors de l'utilisation d'un éditeur de code Visual Studio. - Cette directive est simplement utilisée pour organiser le code.
- Le bloc #region ne peut pas chevaucher un
#ifbloquer. Cependant, un#regionle bloc peut être inclus dans un#ifbloc et un#ifle bloc peut chevaucher un#regionbloquer. #endregionindique la fin d'un#regionbloquer.- Syntaxe :
#region region-description codes #endregion
Exemple 6 :Comment utiliser la directive #region ?
using System;
namespace Directive
{
class Region
{
public static void Main(string[] args)
{
#region Hello
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
#endregion
}
}
}
Lorsque nous exécutons le programme, la sortie sera :
Hello Hello Hello Hello Hello
Directive #pragma
- Le
#pragmaest utilisée pour donner au compilateur des instructions spéciales pour la compilation du fichier dans lequel elle apparaît. - L'instruction peut inclure la désactivation ou l'activation de certains avertissements.
- C# prend en charge deux
#pragmainstructions :#pragma warning:Utilisé pour désactiver ou activer les avertissements#pragma checksum:Il génère des sommes de contrôle pour les fichiers source qui seront utilisés pour le débogage.
- Syntaxe :
#pragma pragma-name pragma-arguments
- Par exemple :
#pragma warning disable
Exemple 7 :Comment utiliser la directive #pragma ?
using System;
namespace Directive
{
class Error
{
public static void Main(string[] args)
{
#pragma warning disable
#warning This is a warning 1
#pragma warning restore
#warning This is a warning 2
}
}
}
Lorsque nous exécutons le programme, la sortie sera :
Program.cs(12,22): warning CS1030: #warning: 'This is a warning 2' [/home/myuser/csharp/directive-project/directive-project.csproj]
Nous pouvons voir que seul le deuxième avertissement s'affiche sur l'écran de sortie.
En effet, nous avons initialement désactivé tous les avertissements avant le premier avertissement et les avons restaurés uniquement avant le deuxième avertissement. C'est la raison pour laquelle le premier avertissement a été masqué.
Nous pouvons également désactiver un avertissement spécifique au lieu de tous les avertissements.
Pour en savoir plus sur #pragma , visitez #pragma (référence C#).
Langue C