C# Präprozessor-Direktiven: Bedingte Kompilierung steuern
Präprozessor-Direktiven
Anweisungen an den Compiler, die vor** der eigentlichen Kompilierung verarbeitet werden. Beginnen mit #, enden nicht mit Semikolon. In C# gibt es keinen separaten Präprozessor; die Direktiven werden vom Compiler ausgewertet.
Übersicht der Direktiven
| Direktive | Beschreibung |
|---|---|
#define SYMBOL | Definiert ein bedingtes Kompilierungssymbol. |
#undef SYMBOL | Entfernt eine Symbol-Definition. |
#if SYMBOL | Startet bedingten Block (wahr wenn Symbol definiert). |
#elif SYMBOL | Alternative Bedingung innerhalb von #if. |
#else | Else-Zweig für #if. |
#endif | Beendet bedingten Block. |
#warning "Text" | Erzeugt Compiler-Warnung. |
#error "Text" | Erzeugt Compiler-Fehler (Build bricht ab). |
#line 100 "file.cs" | Setzt Zeilennummer/Dateiname für Fehlermeldungen. |
#region Name | Startet einklappbaren Code-Bereich (IDE). |
#endregion | Beendet #region. |
Bedingte Kompilierung
#define DEBUG
#define VC_V10
using System;
public class Test
{
static void Main()
{
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG only");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 only");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG and VC_V10 defined");
#else
Console.WriteLine("Neither defined");
#endif
Console.ReadKey();
}
}
Ausgabe: DEBUG and VC_V10 defined
Operatoren in #if/#elif
==,!=(Gleichheit/Ungleichheit von Symbolen)&&(UND),||(ODER)!(NICHT)- Klammern zur Gruppierung erlaubt.
Typische Verwendungsszenarien
- Debug/Release-Builds:
#if DEBUG… Logging, Asserts. - Plattformspezifischer Code:
#if NETFRAMEWORK/#if NETCOREAPP. - Feature-Flags:
#if FEATURE_X. - Code-Generierung/Metaprogrammierung:
#linefür generierte Dateien.
#region / #endregion
Nur für Editor-Support (Visual Studio, VS Code, Rider). Keine Auswirkung auf Kompilierung.
#region Public Methods
public void Method1() { }
public void Method2() { }
#endregion
#region Private Helpers
private void Helper() { }
#endregion
Wichtige Hinweise
- Symbole sind pro Datei (oder Projektweit über Projekt-Einstellungen /
<DefineConstants>in .csproj). - Keine Makros wie in C/C++ (keine Textsubstitution mit Parametern).
#definemuss vor allem anderen Code in der Datei stehen.
C Sprache
- C# Hello World – Ihre erste C#-Anwendung erstellen
- C# Keywords und Identifiers verstehen: Regeln, Listen und Best Practices
- C# Variablen & Primitive Datentypen meistern: Der komplette Guide
- C# Operatoren – Umfassender Leitfaden zu Operatoren in C#
- C# Bitweise und Bit-Shift-Operatoren meistern: Umfassender Leitfaden
- C# Grundlagen: Eingabe und Ausgabe Essentials
- C# Ausdrücke, Anweisungen & Blöcke: Umfassender Leitfaden mit Beispielen
- C# Kommentare meistern: Arten, Best Practices und XML-Dokumentation
- C# Switch Statement meistern: Syntax, Beispiele & Best Practices
- C# Ternärer Operator: Knapper Leitfaden zu bedingten Ausdrücken