C# Preprocessor-richtlijnen
C# Preprocessor-richtlijnen
In deze zelfstudie leren we over Preprocessor-richtlijnen, beschikbare richtlijnen in C# en wanneer, waarom en hoe waarom ze worden gebruikt.
Zoals de naam rechtvaardigt, zijn preprocessor-richtlijnen een blok met instructies die worden verwerkt voordat de eigenlijke compilatie begint. C# preprocessor-richtlijnen zijn de opdrachten voor de compiler die het compilatieproces beïnvloeden.
Deze commando's specificeren welke secties van de code moeten worden gecompileerd of hoe specifieke fouten en waarschuwingen moeten worden afgehandeld.
C# preprocessor-richtlijn begint met een # (hash) symbool en alle preprocessor-richtlijnen duren één regel. Preprocessor-richtlijnen worden beëindigd door new line in plaats van semicolon .
De preprocessor-richtlijnen die beschikbaar zijn in C# zijn:
| Preprocessor-richtlijn | Beschrijving | Syntaxis |
|---|---|---|
#if | Controleert of een preprocessor-expressie waar is of niet | #if preprocessor-expression code to compile #endif |
#elif | Gebruikt samen met #if meerdere preprocessor-expressies controleren | #if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code to compile #endif |
#else | Gebruikt samen met #if om een samengestelde voorwaardelijke richtlijn te maken. | #if preprocessor-expression code to compile #elif code to compile #endif |
#endif | Gebruikt samen met #if om het einde van een voorwaardelijke richtlijn aan te geven | #if preprocessor-expression code to compile #endif |
#define | Gebruikt om een symbool te definiëren | #define SYMBOL |
#undef | Gebruikt om een symbool ongedaan te maken | #undef SYMBOL |
#warning | Hiermee kunnen we een waarschuwing van niveau 1 genereren op basis van onze code | #warning warning-message |
#error | Hiermee kunnen we een fout genereren uit onze code | #error error-message |
#line | Hiermee kunnen we het regelnummer en de bestandsnaam van de compiler wijzigen om fouten en waarschuwingen weer te geven | #line line-number file-name |
#region | Hiermee kunnen we een regio maken die kan worden uitgevouwen of samengevouwen bij gebruik van een Visual Studio Code Editor | #region region-description codes #endregion |
#endregion | Geeft het einde van een regio aan | #region region-description codes #endregion |
#pragma | Geeft de compiler speciale instructies voor het compileren van het bestand waarin het voorkomt. | #pragma pragma-name pragma-arguments |
#define richtlijn
- De
#definerichtlijn stelt ons in staat om een symbool te definiëren. - Symbolen die worden gedefinieerd bij gebruik in combinatie met
#ifrichtlijn zal evalueren naar waar. - Deze symbolen kunnen worden gebruikt om voorwaarden voor compilatie op te geven.
- Syntaxis:
#define SYMBOL
- Bijvoorbeeld:
#define TESTING
Hier is TESTEN een symbool.
#undef richtlijn
- De
#undefrichtlijn stelt ons in staat om een symbool ongedaan te maken. - Ongedefinieerde symbolen bij gebruik in combinatie met
#ifrichtlijn zal evalueren naar onwaar. - Syntaxis:
#undef SYMBOL
- Bijvoorbeeld:
#undef TESTING
Hier is TESTEN een symbool.
#if richtlijn
- De
#ifrichtlijn worden gebruikt om de preprocessor-expressie te testen. - Een preprocessor-expressie kan bestaan uit alleen een symbool of een combinatie van symbolen samen met operators zoals
&&(EN),||(OF),!(NIET). #ifinstructie wordt gevolgd door een#endifrichtlijn.- De codes in de
#ifrichtlijn wordt alleen gecompileerd als de expressie getest met#ifevalueert tot waar. - Syntaxis:
#if preprocessor-expression code to compile< #endif
- Bijvoorbeeld:
#if TESTING Console.WriteLine("Currently Testing"); #endif
Voorbeeld 1:Hoe gebruik ik de #if-richtlijn?
#define CSHARP
using System;
namespace Directive
{
class ConditionalDirective
{
public static void Main(string[] args)
{
#if (CSHARP)
Console.WriteLine("CSHARP is defined");
#endif
}
}
}
Wanneer we het programma uitvoeren, is de uitvoer:
CSHARP is defined
In het bovenstaande programma, CSHARP symbool wordt gedefinieerd met behulp van de #define richtlijn aan het begin van het programma. In de Main() methode, #if richtlijn wordt gebruikt om te testen of CSHARP is waar of niet. Het codeblok in #if richtlijn wordt alleen gecompileerd als CSHARP is gedefinieerd.
#elif-richtlijn
- De
#elifrichtlijn wordt gebruikt samen met #if richtlijn waarmee we een samengestelde voorwaardelijke richtlijn kunnen maken. - Het wordt gebruikt bij het testen van meerdere preprocessor-expressies.
- De codes in de
#elifrichtlijn wordt alleen gecompileerd als de uitdrukking die is getest met die#elifevalueert tot waar. - Syntaxis:
#if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #endif
- Bijvoorbeeld:
#if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #endif
#else richtlijn
- De
#elserichtlijn wordt gebruikt samen met#ifrichtlijn. - Als geen van de uitdrukkingen in de voorgaande
#ifen#elif(indien aanwezig) richtlijnen zijn waar, de codes binnen de#elserichtlijn zal worden opgesteld. - Syntaxis:
#if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #else code-to-compile #endif
- Bijvoorbeeld:
#if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #else Console.WriteLine("Neither Testing nor Training"); #endif
#endif richtlijn
- De
#endifrichtlijn wordt gebruikt samen met#ifinstructie om het einde van#ifaan te geven richtlijn. - Syntaxis:
#if preprocessor-expression-1 code to compile #endif
- Bijvoorbeeld:
#if TESTING Console.WriteLine("Currently Testing"); #endif
Voorbeeld 2:Hoe gebruik je een voorwaardelijke richtlijn (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
}
}
} Wanneer we het programma uitvoeren, is de uitvoer:
CSHARP is defined, PYTHON is undefined
In dit voorbeeld zien we het gebruik van #elif en #else richtlijn. Deze richtlijn wordt gebruikt wanneer er meerdere voorwaarden moeten worden getest. Ook kunnen symbolen worden gecombineerd met behulp van logische operatoren om een preprocessor-expressie te vormen.
#warning richtlijn
- De
#warningrichtlijn stelt ons in staat om een door de gebruiker gedefinieerde niveau één waarschuwing te genereren uit onze code. - Syntaxis:
#warning warning-message
- Bijvoorbeeld:
#warning This is a warning message
Voorbeeld 3:Hoe de #warning-richtlijn te gebruiken?
using System;
namespace Directives
{
class WarningDirective
{
public static void Main(string[] args)
{
#if (!CSHARP)
#warning CSHARP is undefined
#endif
Console.WriteLine("#warning directive example");
}
}
}
Wanneer we het programma uitvoeren, is de uitvoer:
Program.cs(10,26): warning CS1030: #warning: 'CSHARP is undefined' [/home/myuser/csharp/directives-project/directives-project.csproj] #warning directive example
Na het uitvoeren van het bovenstaande programma, zullen we de uitvoer zien zoals hierboven. De tekst vertegenwoordigt een waarschuwingsbericht. Hier genereren we een door de gebruiker gedefinieerd waarschuwingsbericht met behulp van de #warning richtlijn.
Merk op dat de instructies na de #warning richtlijn worden ook uitgevoerd. Het betekent dat de #warning instructie beëindigt het programma niet, maar geeft alleen een waarschuwing.
#foutrichtlijn
- De
#errorrichtlijn stelt ons in staat om een door de gebruiker gedefinieerde fout van onze code te genereren. - Syntaxis:
#error error-message
- Bijvoorbeeld:
#error This is an error message
Voorbeeld 4:Hoe gebruik ik de #error-richtlijn?
using System;
namespace Directive
{
class Error
{
public static void Main(string[] args)
{
#if (!CSHARP)
#error CSHARP is undefined
#endif
Console.WriteLine("#error directive example");
}
}
}
Wanneer we het programma uitvoeren, is de uitvoer:
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.
We zullen enkele fouten zien, waarschijnlijk zoals hierboven. Hier genereren we een door de gebruiker gedefinieerde fout.
Een ander ding om op te merken is dat het programma zal worden beëindigd en de regel #error directive example wordt niet afgedrukt zoals in de #warning richtlijn.
#line richtlijn
- De
#linerichtlijn stelt ons in staat om het regelnummer en de bestandsnaam te wijzigen voor fouten en waarschuwingen. - Syntaxis:
#line line-number file-name
- Bijvoorbeeld:
#line 50 "fakeprogram.cs"
Voorbeeld 5:Hoe gebruik ik de #line-instructie?
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
}
}
}
Wanneer we het programma uitvoeren, is de uitvoer:
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]
We hebben het bovenstaande voorbeeld opgeslagen als Program.cs . De waarschuwing is eigenlijk gegenereerd om line 10 door Program.cs . De #line gebruiken richtlijn hebben we het regelnummer gewijzigd in 200 en de bestandsnaam naar AnotherProgram.cs die de fout heeft gegenereerd.
#region en #endregion richtlijn
- De
#regionrichtlijn stelt ons in staat om een regio te maken die kan worden uitgevouwen of samengevouwen bij gebruik van een Visual Studio Code Editor. - Deze richtlijn wordt alleen gebruikt om de code te ordenen.
- Het #region-blok mag niet overlappen met een
#ifblok. Echter, een#regionblok kan worden opgenomen in een#ifblok en een#ifblok kan overlappen met een#regionblok. #endregioninstructie geeft het einde aan van een#regionblok.- Syntaxis:
#region region-description codes #endregion
Voorbeeld 6:Hoe gebruik ik de #regionrichtlijn?
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
}
}
}
Wanneer we het programma uitvoeren, is de uitvoer:
Hello Hello Hello Hello Hello
#pragma richtlijn
- De
#pragmarichtlijn wordt gebruikt om de compiler een aantal speciale instructies te geven voor de compilatie van het bestand waarin het voorkomt. - De instructie kan het in- of uitschakelen van enkele waarschuwingen bevatten.
- C# ondersteunt twee
#pragmainstructies:#pragma warning:Gebruikt voor het in- of uitschakelen van waarschuwingen#pragma checksum:Het genereert controlesommen voor bronbestanden die zullen worden gebruikt voor debuggen.
- Syntaxis:
#pragma pragma-name pragma-arguments
- Bijvoorbeeld:
#pragma warning disable
Voorbeeld 7:Hoe de #pragma-richtlijn te gebruiken?
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
}
}
}
Wanneer we het programma uitvoeren, is de uitvoer:
Program.cs(12,22): warning CS1030: #warning: 'This is a warning 2' [/home/myuser/csharp/directive-project/directive-project.csproj]
We kunnen zien dat alleen de tweede waarschuwing wordt weergegeven op het uitvoerscherm.
Dit komt omdat we aanvankelijk alle waarschuwingen vóór de eerste waarschuwing hebben uitgeschakeld en ze pas vóór de tweede waarschuwing hebben hersteld. Dit is de reden waarom de eerste waarschuwing verborgen was.
We kunnen ook specifieke waarschuwingen uitschakelen in plaats van alle waarschuwingen.
Voor meer informatie over #pragma , bezoek #pragma (C#-referentie).
C Taal