C# – Bedingte Kompilierung

Bedingte Kompilierung oder Kleines Präprozessor ABC für C#

Einleitung

Der Präprozessor unter C# ist nicht zu vergleichen mit den wesentlich komplexeren Präprozessoren der C und C++ Compiler.

Es gibt z.B. weder eine Makroverarbeitung noch die Möglichkeit mit #include sogenannte Header Dateien zu inkludieren. Da dieser Beitrag „Kleines Präprozessor ABC“ heißt, möchte ich darauf verzichten auf die Einzelheiten solcher Unterschiede einzugehen.

Verfügbare Direktiven des C# Präprozessor

Direktive Typ Verwendung
#define Bezeichner Mit #define wird ein Bezeichner gesetzt. Stellen Sie sich einen Bezeichner wie eine boolsche Variable vor. #define ist dann so wie das setzen einer Variablen auf true. Einem Bezeichner können keine Werte zugewiesen werden
#undef Bezeichner Mit #undef heben Sie die Gültigkeit eines Bezeichners auf. Sie können dies auch mit dem setzen einer Variablen auf false setzen vergleichen.
#if Ausdruck Der Code innerhalb des mit #if eingeleiteten Abschnittes wird ausgeführt wenn der Ausdruck wahr ist (Bei einfachen #if Ausdrücken ist das der Fall wenn der auf #if folgende Bezeichner gesetzt ist.
#else Ergibt der diesem #else vorangegangene Ausdruck false, dann wird der Bereich des #else ausgeführt.
#elif Ausdruck Anstelle des #else kann man mit Hilfe des #elif Ausdrucks diesen Bereich nur dann ausführen lassen, wenn der Angegebene Ausdruck true ergibt
#endif Zeigt das Ende eines Ausdrucks bzw. einer zusammengehörenden Reihe von Ausdrücken an.
#warning Ausdruck Ausgabe einer Warnung während des Kompilieren’s
#error Ausdruck Ausgabe einer Fehlermeldung während des Kompilieren’s
#line Ausdruck Ermöglicht die Manipulation und Ausgabe von Zeilennummern, nähere Informationen hierüber kann man hier nachlesen
#region Direktive Bezeichnet den Anfang einer Region im Quelltext.
Beispiel #region Events
#endregion Ende einer mir #region eingeleiteten Region im Quelltext
#pragma Direktive Mit #pragma gibt man spezielle Anweisungen für das Verhalten des Compilers.
Beispiel: #pragma warning disable 123, 4567 zum Abschalten bestimmter Compiler Warnungen. Nähere Informationen über die #pragma Direktiven gibt es hier

Operatoren für die Verwendung mit Ausdrücken

Operatoren Beispiel Funktionsweise
! #if !DEBUG Das ! negiert den Wert von var. Im Beispiel bedeutet das, ist DEBUG nicht definiert, wird der #if Bereich ausgeführt.
== #if DEBUG == true == Prüft auf Gleichheit. Im Beispiel bedeutet dies, wenn DEBUG definiert ist, dann wird der Bereich des #if Ausdrucks ausgeführt.
!== #if DEBUG !== true == Prüft auf Ungleichheit. Im Beispiel bedeutet dies, wenn DEBUG definiert ist, dann wird der Bereich des #if nicht Ausdrucks ausgeführt.
&& #if DEBUG && TRACE Logisches Und. Wenn DEBUG und TRACE definiert sind, wird der #if Ausdruck wahr, also ausgeführt.
|| #if DEBUG || TRACE Logisches Oder (kein Exklusiv Oder). Der #if Ausdruck ist wahr wenn DEBUG und/oder TRACE definiert sind.

Beispiele

Einfaches Beispiel mit einem Define und einer Bedingten Kompilierung

#define DEBUG

#if DEBUG
// Diese Bereich wird nur kompiliert wenn DEBUG definiert ist
System.Diagnostics.Debug.WriteLine(„DEBUG ist definiert“);
#endif

Beispiel einer Anwendung mit einem error Ausdruck und einem #elif

#define RELEASE
#define DEMO

#if RELASE && DEMO
#error RELEASE und DEMO dürfen nicht zusammen verwendet werden
#elif DEMO
// HIER zum Beispiel der Code, der eine DEMO Version beschränkt, oder was auch immer
#endif

Ein Gedanke zu „C# – Bedingte Kompilierung“

  1. Gibt es dazu auch ein äquivalent für XAML? Es wäre ganz interessant für eine Demoversion auch das UI beschränken zu können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.