C# Präprozessordirektiven
Präprozessordirektiven weisen den Compiler an, Informationen vor der eigentlichen Kompilierung vorzuverarbeiten.
Mit diesen Direktiven können Sie steuern, wie der Compiler Dateien kompiliert oder welche Teile kompiliert werden. Häufige Präprozessordirektiven umfassen bedingte Kompilierung, Makrodefinitionen und so weiter.
Alle Präprozessordirektiven beginnen mit#Sie beginnen mit #, und in einer Zeile dürfen vor einer Präprozessordirektive nur Whitespace-Zeichen stehen.
Präprozessordirektiven sind keine Anweisungen, daher enden sie nicht mit einem Semikolon.;Ende.
Der C#-Compiler besitzt keinen separaten Präprozessor; die Direktiven werden jedoch so behandelt, als gäbe es einen. In C# werden Präprozessordirektiven für die bedingte Kompilierung verwendet. Anders als in C und C++ werden sie nicht zum Erstellen von Makros verwendet. Eine Präprozessordirektive muss die einzige Direktive in dieser Zeile sein.
Liste der C#-Präprozessordirektiven
Die folgende Tabelle listet die in C# verfügbaren Präprozessordirektiven auf:
| Direktive | Beschreibung |
|---|---|
#define | Definiere ein Symbol, das für die bedingte Kompilierung verwendet werden kann. |
#undef | Hebt die Definition eines Symbols auf. |
#if | Beginne einen Block für die bedingte Kompilierung; schließe den Codeblock ein, wenn das Symbol definiert ist. |
#elif | Wenn die vorherige#ifoder#elifWenn die vorherige Bedingung nicht erfüllt ist und die aktuelle Bedingung erfüllt ist, schließe den Codeblock ein. |
#else | Wenn die vorherige#ifoder#elifWenn die Bedingung nicht erfüllt ist, schließe den Codeblock ein. |
#endif | Beende einen Block für die bedingte Kompilierung. |
#warning | Generiere eine Compilerwarnung. |
#error | Generiere eine Compilerfehlermeldung. |
#region | Markiere einen Codebereich, der in der IDE ein- und ausgeklappt werden kann, wodurch die Codeorganisation und das Lesen erleichtert werden. |
#endregion | Beende einen Codebereich. |
#line | Ändere die Zeilennummer und den Dateinamen in der Compilerausgabe, was zum Debuggen oder für von Tools generierten Code verwendet werden kann. |
#pragma | Wird verwendet, um spezielle Anweisungen an den Compiler zu senden, z. B. zum Deaktivieren oder Wiederherstellen bestimmter Warnungen. |
#nullable | Steuern den Nullable-Kontext und Annotationen, sodass Compilerprüfungen für Nullable-Verweistypen aktiviert oder deaktiviert werden können. |
Beispiel
#if DEBUG
Console.WriteLine("Debugmodus");
#elif RELEASE
Console.WriteLine("Release-Modus");
#else
Console.WriteLine("Anderer Modus");
#endif
#warning Dies ist eine Warnmeldung
#error Dies ist eine Fehlermeldung
#region MyRegion
// Ihr Code hier
#endregion
#line 100 "MyFile.cs"
// Die nächste Zeile wird in MyFile.cs als Zeile 100 gemeldet
Console.WriteLine("This is line 100");
#line default
// Die Zeilennummerierung wird wieder normal
#pragma warning disable 414
private int unusedVariable;
#pragma warning restore 414
#nullable enable
string? nullableString = null;
#nullable disable
#define und #undef Präprozessor
#defineWird verwendet, um ein Symbol zu definieren (normalerweise für bedingte Kompilierung),#undefWird verwendet, um die Definition eines Symbols aufzuheben.
#define DEBUG #undef RELEASE
#define ermöglicht es Ihnen, ein Symbol zu definieren, sodass der Ausdruck true zurückgibt, wenn das Symbol als Ausdruck an die #if-Direktive übergeben wird. Die Syntax lautet wie folgt:
#define symbol
Das folgende Programm veranschaulicht dies:
Beispiel
using System;
namespace PreprocessorDAppl
{
class Program
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine("PI ist definiert");
#else
Console.WriteLine("PI ist nicht definiert");
#endif
Console.ReadKey();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
PI is defined
Bedingte Direktiven: #if, #elif, #else und #endif
Sie können die#if-Direktive verwenden, um eine bedingte Direktive zu erstellen.
Bedingte Direktiven werden verwendet, um zu testen, ob ein Symbol true ist. Wenn true, führt der Compiler den#if-Code zwischen dieser Direktive und der nächsten aus.
Syntax der bedingten Direktiven:
#if symbol [operator symbol]...
wobei,Symbolder Name des Symbols, das getestet werden soll. Sie können auch true und false verwenden oder einen Negationsoperator vor das Symbol setzen.
Zu den üblichen Operatoren gehören:
- == (gleich)
- != (ungleich)
- && (UND)
- || (ODER)
Sie können auch Klammern verwenden, um Symbole und Operatoren zu gruppieren. Bedingte Direktiven werden verwendet, um Code in Debug-Builds oder beim Kompilieren einer angegebenen Konfiguration zu kompilieren. Eine bedingte Direktive, die mit einer#if-Direktive beginnt, muss ausdrücklich mit einer#endifAnweisung beendet.
#define DEBUG
#if DEBUG
Console.WriteLine("Debug mode");
#elif RELEASE
Console.WriteLine("Release mode");
#else
Console.WriteLine("Other mode");
#endif
Das folgende Programm veranschaulicht die Verwendung bedingter Direktiven:
Beispiel
#define VC_V10
using System;
public class TestClass
{
public static void Main()
{
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG ist definiert");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 ist definiert");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG und VC_V10 sind definiert");
#else
Console.WriteLine("DEBUG und VC_V10 sind nicht definiert");
#endif
Console.ReadKey();
}
}
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
DEBUG and VC_V10 are defined
#warning und #error
#warning wird verwendet, um Compilerwarnungen zu erzeugen, und #error wird verwendet, um Compilerfehler zu erzeugen.
#warning This is a warning message #error This is an error message
#region und #endregion
Wird für Code-Folding verwendet, um den Code lesbarer zu machen.
#region MyRegion
// Your code here
#endregion
#line
Wird verwendet, um die Dateizeilennummer und den Dateinamen in der Compilerausgabe zu ändern.
#line 100 "MyFile.cs"
// The next line will be reported as line 100 in MyFile.cs
Console.WriteLine("This is line 100");
#line default
// Line numbering returns to normal
#pragma
Wird verwendet, um dem Compiler spezielle Anweisungen zu übermitteln. Der häufigste Einsatz ist das Deaktivieren bestimmter Warnungen.
#pragma warning disable 414
private int unusedVariable;
#pragma warning restore 414
Hinweise zur Verwendung von Präprozessordirektiven
- Verbessern Sie die Lesbarkeit des Codes: Verwenden Sie
#regionKann helfen, Codeblöcke zu trennen und die Codeorganisation zu verbessern. - Bedingte Kompilierung: durch
#ifSolche Direktiven können in Entwicklungs- und Produktionsumgebungen unterschiedlichen Code kompilieren, was das Debugging und Release erleichtert. - Warnungen und Fehler: durch
#warningund#errorSie können Entwickler dazu anregen, beim Kompilieren auf bestimmte Probleme zu achten.
Durch die korrekte Verwendung dieser Präprozessordirektiven können Sie den Kompilierungsprozess von Code besser steuern und die Flexibilität und Wartbarkeit des Codes verbessern.
Weitere Erweiterungen