Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C# preprocessor directives: een praktische gids

C# preprocessor directives onder de knie

Ontdek hoe C# preprocessor directives compilatie, control flow en error handling sturen. Deze gids dekt elke directive, syntaxis, real-world voorbeelden en best practices.

Preprocessor directives zijn commando's die de compiler evalueert voordat de echte compilatie begint. Ze bepalen welke codesecties worden opgenomen, hoe waarschuwingen en fouten worden afgehandeld, en kunnen zelfs de compiler's zicht op regelnummers en bestandsnamen wijzigen.

In C# begint een directive met een #-symbool en strekt zich over één regel, beëindigd door een newline in plaats van een puntkomma.

Preprocessor Directives in C#
DirectiveBeschrijvingSyntaxis
#ifEvalueert een preprocessor expressie en neemt code op alleen als true.
#if expression code #endif
#elifWordt na #if gebruikt om additionele expressies te testen.
#if expr1 code1 #elif expr2 code2 #endif
#elseVoert uit wanneer geen van de voorgaande #if of #elif condities true zijn.
#if expr1 code1 #else code2 #endif
#endifMarkeert het einde van een conditioneel blok.
#if expr code #endif
#defineDefinieert een nieuw symbool.
#define SYMBOL
#undefVerwijdert een eerder gedefinieerd symbool.
#undef SYMBOL
#warningGenereert een level-1 compiler waarschuwing.
#warning Your warning message
#errorVeroorzaakt een compile-time error.
#error Your error message
#lineOverschrijft regelnummer en bestandsnaam voor diagnostiek.
#line 50 "FakeProgram.cs" #endif
#regionCreëert een uitklapbaar gebied in editors zoals Visual Studio.
#region Description code #endregion
#pragmaGeeft speciale instructies aan de compiler (bijv. warnings enable/disable).
#pragma warning disable #endif

Symbolen definiëren en undefiniëren

  • #define creëert een symbool dat evalueert naar true in #if blokken.
  • #undef verwijdert een symbool, waardoor het evalueert naar false.

Voorbeeld: Een symbool definiëren

#define TESTING

Voorbeeld: Een symbool undefiniëren

#undef TESTING

Conditionele compilatie met #if, #elif, #else en #endif

  • #if test een expressie; code erin wordt alleen gecompileerd als de expressie true is.
  • Expressies mogen logische operatoren (&&, ||, !) en symbolen gebruiken.
  • #elif stelt testen van meerdere condities achtereen toe.
  • #else draait wanneer geen van de voorgaande condities voldaan is.
  • #endif beëindigt het conditionele blok.

Praktisch voorbeeld

#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 } } }

Output: CSHARP is defined, PYTHON is undefined


Waarschuwingen en fouten genereren

  • #warning emiteert een user-defined compiler waarschuwing maar laat het programma doorgaan.
  • #error emiteert een fatale fout, compilatie stopt.

Waarschuwingsvoorbeeld

using System; namespace Directives { class WarningDirective { public static void Main(string[] args) { #if (!CSHARP) #warning CSHARP is undefined #endif Console.WriteLine("#warning directive example"); } } }

Output bevat een waarschuwingsregel maar de console tekst print.

Foutvoorbeeld

using System; namespace Directive { class Error { public static void Main(string[] args) { #if (!CSHARP) #error CSHARP is undefined #endif Console.WriteLine("#error directive example"); } } }

Output: build faalt met compile-time error; de laatste console regel wordt nooit uitgevoerd.


Diagnostische locaties aanpassen met #line

  • Wijzigt het gerapporteerde regelnummer en bestandsnaam voor daaropvolgende waarschuwingen of fouten.

Voorbeeld

using System; namespace Directive { class LineDemo { public static void Main(string[] args) { #line 200 "AnotherProgram.cs" #warning Actual warning generated by Program.cs on line 10 } } }

Resultaat: Waarschuwing verschijnt als AnotherProgram.cs(200,22): warning CS1030: ...


Code organiseren met #region en #endregion

  • Groepeert gerelateerde codeblokken, die in editors uitgeklapt kunnen worden.
  • Kunnen niet overlappen met een ander #region, maar mogen binnen een conditioneel blok staan.

Voorbeeld

using System; namespace Directive { class RegionDemo { public static void Main(string[] args) { #region Hello Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello"); #endregion } } }

Output: vijf regels "Hello".


Geavanceerde compiler instructies met #pragma

  • Staat fijnmazige controle over compiler gedrag toe.
  • Veelvoorkomend gebruik:
    • #pragma warning disable – zet alle waarschuwingen uit.
    • #pragma warning restore – zet waarschuwingen weer aan.
    • Specifieke waarschuwingsnummers kunnen getarget worden (bijv. #pragma warning disable CS0168).
    • #pragma checksum – genereert checksums voor debugging.

Voorbeeld

using System; namespace Directive { class PragmaDemo { public static void Main(string[] args) { #pragma warning disable #warning This is a warning 1 #pragma warning restore #warning This is a warning 2 } } }

Alleen de tweede waarschuwing wordt getoond.

Voor dieper inzicht, raadpleeg de officiële #pragma (C# reference).


C Taal

  1. 3D-printen vs CNC-bewerking: De juiste tool voor uw project kiezen
  2. Wat Staat SFM Voor in CNC-Bewerking?
  3. C# Keywords en Identifiers begrijpen: Regels, lijsten en best practices
  4. C++ variabelen, literalen en constanten: een uitgebreide gids
  5. C++ datatypes begrijpen: fundamentals, modifiers en best practices
  6. C Sleutelwoorden & Identifiers: Een Praktische Gids
  7. C Datatypes Uitgelegd: int, float, char en Meer – Een Complete Gids
  8. De C-preprocessor (CPP) begrijpen: Hoe het de compilatie vereenvoudigt
  9. Python Keywords en Identifiers: Gereserveerde woorden en naamconventies onder de knie krijgen
  10. Python Regular Expressions (re-module) – een praktische gids
  11. Python's time-module beheersen: functies, structs en praktische voorbeelden