C# Preprocessor Directives Beheersen: Hoe Ze Je Code Vormgeven
Preprocessordirectives geven instructies aan de compiler om informatie te verwerken vóór de daadwerkelijke compilatie.
Alle directives beginnen met #, mogen alleen voorafgegaan worden door witruimte, en zijn geen statements (geen puntkomma).
De C#-compiler heeft geen losse preprocessor, maar verwerkt directives alsof er één is. In C# worden ze gebruikt voor conditionele compilatie, niet voor macros (anders dan C/C++). Een directive moet de enige instructie op een regel zijn.
Preprocessor Directives in C#
| Nr | Directive & Beschrijving |
|---|---|
| 1 | #define – Definieert een symbool (tekenreeks). |
| 2 | #undef – Maakt een symbool ongedefinieerd. |
| 3 | #if – Test of symbool(s) true evalueren. |
| 4 | #else – Alternatief bij #if. |
| 5 | #elif – Else-if voor conditionele directives. |
| 6 | #endif – Einde van conditionele directive. |
| 7 | #line – Wijzigt compilator regelnummer en bestandsnaam voor foutmeldingen. |
| 8 | #error – Genereert fout vanaf specifieke locatie. |
| 9 | #warning – Genereert waarschuwing (niveau 1). |
| 10 | #region – Markeert uitvouwbare codeblok in Visual Studio. |
| 11 | #endregion – Einde van #region blok. |
De #define Preprocessor
Creëert symbolische constanten. #define symbool maakt expressie in #if true.
Voorbeeld
#define PI
using System;
namespace PreprocessorApp {
class Program {
static void Main(string[] args) {
#if (PI)
Console.WriteLine("PI is gedefinieerd");
#else
Console.WriteLine("PI is niet gedefinieerd");
#endif
Console.ReadKey();
}
}
}
Uitvoer: PI is gedefinieerd
Conditionele Directives
#if creëert conditionele directive. Nuttig voor debug builds of specifieke configuraties. Moet eindigen met #endif.
Syntaxis: #if symbool [operator symbool]...
Operatoren: ==, !=, &&, ||. Haakjes voor groepering toegestaan.
Voorbeeld
#define DEBUG
#define VC_V10
using System;
public class TestKlasse {
public static void Main() {
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG is gedefinieerd");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 is gedefinieerd");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG en VC_V10 zijn gedefinieerd");
#else
Console.WriteLine("DEBUG en VC_V10 zijn niet gedefinieerd");
#endif
Console.ReadKey();
}
}
Uitvoer: DEBUG en VC_V10 zijn gedefinieerd
C Taal
- C# Hello World – Uw eerste C# applicatie bouwen
- C# Keywords en Identifiers begrijpen: Regels, lijsten en best practices
- C# Variabelen & Primitive Datatypes onder de knie krijgen: Complete gids
- C# Operators – Uitgebreide gids voor operators in C#
- C# Bitwise en Bit Shift Operators: Een Uitgebreide Gids
- C# Fundamentals: Invoer en Uitvoer Basis
- C# Expressies, Statements & Blokken: Uitgebreide Gids met Praktische Voorbeelden
- C# Comments Onder de Loep: Types, Best Practices en XML Documentatie
- De C# Switch Statement: Syntaxis, Voorbeelden & Best Practices
- De C# Ternaire Operator: Beknopte Gids voor Conditionele Expressies
- C# preprocessor directives: een praktische gids