C # Οδηγίες προεπεξεργαστή

Σε αυτό το σεμινάριο, θα μάθουμε για τις οδηγίες προεπεξεργαστή, τις διαθέσιμες οδηγίες στο C #, και πότε, γιατί και πώς χρησιμοποιούνται.

Όπως δικαιολογεί το όνομα, οι οδηγίες προεπεξεργαστή είναι ένα μπλοκ δηλώσεων που υποβάλλονται σε επεξεργασία πριν από την έναρξη της πραγματικής σύνταξης. Οι οδηγίες C # προεπεξεργαστή είναι οι εντολές για τον μεταγλωττιστή που επηρεάζουν τη διαδικασία σύνταξης.

Αυτές οι εντολές καθορίζουν ποιες ενότητες του κώδικα θα μεταγλωττιστούν ή πώς θα χειριστούν συγκεκριμένα σφάλματα και προειδοποιήσεις.

Η οδηγία προεπεξεργαστή C # ξεκινά με ένα # (hash)σύμβολο και όλες οι οδηγίες προεπεξεργαστή διαρκούν για μία γραμμή. Οι οδηγίες προεπεξεργαστή τερματίζονται new lineμάλλον παρά semicolon.

Οι οδηγίες προεπεξεργαστή που διατίθενται στο C # είναι:

Οδηγίες προεπεξεργαστή στο C #
Οδηγία προεπεξεργαστή Περιγραφή Σύνταξη
#if Ελέγχει εάν μια έκφραση προεπεξεργαστή είναι αληθής ή όχι
 #if κωδικός έκφρασης προεπεξεργαστή για μεταγλώττιση #endif
#elif Χρησιμοποιείται μαζί με #ifτον έλεγχο πολλαπλών εκφράσεων προεπεξεργαστών
 #if κωδικός προεπεξεργαστή-έκφραση-1 για μεταγλώττιση #elif κωδικός προεπεξεργαστή-έκφραση-2 για μεταγλώττιση
#else Χρησιμοποιήθηκε μαζί με #ifτη δημιουργία σύνθετης οδηγίας υπό όρους.
 #if κωδικός έκφρασης προεπεξεργαστή για μεταγλώττιση κώδικα #elif για μεταγλώττιση #endif
#endif Χρησιμοποιείται μαζί με #ifγια να δείξει το τέλος μιας υπό όρους οδηγίας
 #if κωδικός έκφρασης προεπεξεργαστή για μεταγλώττιση #endif
#define Χρησιμοποιείται για τον ορισμό ενός συμβόλου
 # καθορισμός ΣΥΜΒΟΛΟΥ
#undef Χρησιμοποιείται για τον ορισμό ενός συμβόλου
 #undef ΣΥΜΒΟΛΟ
#warning Μας επιτρέπει να δημιουργήσουμε προειδοποίηση επιπέδου 1 από τον κώδικά μας
 # προειδοποιητικό μήνυμα προειδοποίησης
#error Μας επιτρέπει να δημιουργήσουμε σφάλμα από τον κώδικα μας
 #error error-message
#line Μας επιτρέπει να τροποποιήσουμε τον αριθμό γραμμής και το όνομα αρχείου του μεταγλωττιστή για να εμφανίσουμε σφάλματα και προειδοποιήσεις
 # line-number-όνομα αρχείου
#region Μας επιτρέπει να δημιουργήσουμε μια περιοχή που μπορεί να επεκταθεί ή να καταρρεύσει κατά τη χρήση ενός Visual Studio Code Editor
 #region-περιγραφή κωδικοί περιοχής #endregion
#endregion Δείχνει το τέλος μιας περιοχής
 #region-περιγραφή κωδικοί περιοχής #endregion
#pragma Δίνει στον μεταγλωττιστή ειδικές οδηγίες για τη σύνταξη του αρχείου στο οποίο εμφανίζεται.
 #pragma pragma-name pragma-επιχειρήματα

# καθορισμός οδηγίας

  • Η #defineοδηγία μας επιτρέπει να ορίσουμε ένα σύμβολο.
  • Τα σύμβολα που ορίζονται όταν χρησιμοποιούνται μαζί με την #ifοδηγία θα αξιολογηθούν ως αληθινά.
  • Αυτά τα σύμβολα μπορούν να χρησιμοποιηθούν για τον καθορισμό συνθηκών συλλογής.
  • Σύνταξη:
     # καθορισμός ΣΥΜΒΟΛΟΥ
  • Για παράδειγμα:
     # καθορισμός ΔΟΚΙΜΗΣ
    Εδώ, το TESTING είναι ένα σύμβολο.

#undef οδηγία

  • Η #undefοδηγία μας επιτρέπει να καθορίσουμε ένα σύμβολο.
  • Undefined symbols when used along with #if directive will evaluate to false.
  • Syntax:
     #undef SYMBOL
  • For example:
     #undef TESTING
    Here, TESTING is a symbol.

#if directive

  • The #if directive are used to test the preprocessor expression.
  • A preprocessor expression may consists of a symbol only or combination of symbols along with operators like && (AND), || (OR), ! (NOT).
  • #if directive is followed by an #endif directive.
  • The codes inside the #if directive is compiled only if the expression tested with #if evaluates to true.
  • Syntax:
     #if preprocessor-expression code to compile< #endif
  • For example:
     #if TESTING Console.WriteLine("Currently Testing"); #endif

Example 1: How to use #if directive?

 #define CSHARP using System; namespace Directive ( class ConditionalDirective ( public static void Main(string() args) ( #if (CSHARP) Console.WriteLine("CSHARP is defined"); #endif ) ) ) 

When we run the program, the output will be:

 CSHARP is defined

In the above program, CSHARP symbol is defined using the #define directive at the beginning of program. Inside the Main() method, #if directive is used to test whether CSHARP is true or not. The block of code inside #if directive is compiled only if CSHARP is defined.

#elif directive

  • The #elif directive is used along with #if directive that lets us create a compound conditional directive.
  • It is used when testing multiple preprocessor expression.
  • The codes inside the #elif directive is compiled only if the expression tested with that #elif evaluates to true.
  • Syntax:
     #if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #endif
  • For example:
     #if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #endif

#else directive

  • The #else directive is used along with #if directive.
  • If none of the expression in the preceding #if and #elif (if present) directives are true, the codes inside the #else directive will be compiled.
  • Syntax:
     #if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #else code-to-compile #endif
  • For example:
     #if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #else Console.WriteLine("Neither Testing nor Training"); #endif

#endif directive

  • The #endif directive is used along with #if directive to indicate the end of #if directive.
  • Syntax:
     #if preprocessor-expression-1 code to compile #endif
  • For example:
     #if TESTING Console.WriteLine("Currently Testing"); #endif

Example 2: How to use conditional directive (if, elif, else, endif) ?

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

When we run the program, the output will be:

 CSHARP is defined, PYTHON is undefined

In this example, we can see the use of #elif and #else directive. These directive are used when there are multiple conditions to be tested. Also, symbols can be combined using logical operators to form a preprocessor expression.

#warning directive

  • The #warning directive allows us to generate a user-defined level one warning from our code.
  • Syntax:
     #warning warning-message
  • For example:
     #warning This is a warning message

Example 3: How to use #warning directive?

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

When we run the program, the output will be:

 Program.cs(10,26): warning CS1030: #warning: 'CSHARP is undefined' (/home/myuser/csharp/directives-project/directives-project.csproj) #warning directive example

After running the above program, we will see the output as above. The text represents a warning message. Here, we are generating a user-defined warning message using the #warning directive.

Note that the statements after the #warning directive are also executed. It means that the #warning directive does not terminate the program but just throws a warning.

#error directive

  • The #error directive allows us to generate a user-defined error from our code.
  • Syntax:
     #error error-message
  • For example:
     #error This is an error message

Example 4: How to use #error directive?

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

When we run the program, the output will be:

 Program.cs(10,24): error CS1029: #error: 'CSHARP is undefined' (/home/myuser/csharp/directives-project/directives-project.csproj) The build failed. Please fix the build errors and run again.

We will see some errors, probably like above. Here we are generating a user-defined error.

Another thing to note here is the program will be terminated and the line #error directive example won't be printed as it was in the #warning directive.

#line directive

  • The #line directive allows us to modify the line number and the filename for errors and warnings.
  • Syntax:
     #line line-number file-name
  • For example:
     #line 50 "fakeprogram.cs"

Example 5: How to use #line directive?

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

When we run the program, the output will be:

 AnotherProgram.cs(200,22): warning CS1030: #warning: 'Actual Warning generated by Program.cs on line 10' (/home/myuser/csh arp/directive-project/directive-project.csproj)

We have saved the above example as Program.cs. The warning was actually generated at line 10 by Program.cs. Using the #line directive, we have changed the line number to 200 and the filename to AnotherProgram.cs that generated the error.

#region and #endregion directive

  • The #region directive allows us to create a region that can be expanded or collapsed when using a Visual Studio Code Editor.
  • This directive is simply used to organize the code.
  • The #region block can not overlap with a #if block. However, a #region block can be included within a #if block and a #if block can overlap with a #region block.
  • #endregion directive indicates the end of a #region block.
  • Syntax:
     #region region-description codes #endregion

Example 6: How to use #region directive?

 using System; namespace Directive ( class Region ( public static void Main(string() args) ( #region Hello Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello"); #endregion ) ) ) 

When we run the program, the output will be:

 Hello Hello Hello Hello Hello

#pragma directive

  • The #pragma directive is used to give the compiler some special instructions for the compilation of the file in which it appears.
  • The instruction may include disabling or enabling some warnings.
  • C# supports two #pragma instructions:
    • #pragma warning: Used for disabling or enabling warnings
    • #pragma checksum: It generates checksums for source files which will be used for debugging.
  • Syntax:
     #pragma pragma-name pragma-επιχειρήματα
  • Για παράδειγμα:
     Απενεργοποίηση προειδοποίησης #pragma

Παράδειγμα 7: Πώς να χρησιμοποιήσετε την οδηγία #pragma;

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

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 Program.cs (12,22): προειδοποίηση CS1030: #warning: "Πρόκειται για μια προειδοποίηση 2" (/home/myuser/csharp/directive-project/directive-project.csproj)

Μπορούμε να δούμε ότι εμφανίζεται μόνο η δεύτερη προειδοποίηση στην οθόνη εξόδου.

Αυτό συμβαίνει επειδή, αρχικά απενεργοποιήσαμε όλες τις προειδοποιήσεις πριν από την πρώτη προειδοποίηση και τις αποκαταστήσαμε μόνο πριν από τη δεύτερη προειδοποίηση. Αυτός είναι ο λόγος για τον οποίο η πρώτη προειδοποίηση ήταν κρυμμένη.

Μπορούμε επίσης να απενεργοποιήσουμε συγκεκριμένη προειδοποίηση αντί για όλες τις προειδοποιήσεις.

Για να μάθετε περισσότερα #pragma, επισκεφθείτε το #pragma (C # αναφορά).

ενδιαφέροντα άρθρα...