C # - Direttive del preprocessore

Le direttive del preprocessore danno istruzioni al compilatore di preelaborare le informazioni prima che inizi la compilazione effettiva.

Tutte le direttive del preprocessore iniziano con # e solo i caratteri spazi bianchi possono apparire prima di una direttiva del preprocessore su una riga. Le direttive del preprocessore non sono istruzioni, quindi non terminano con un punto e virgola (;).

Il compilatore C # non dispone di un preprocessore separato; tuttavia, le direttive vengono elaborate come se ce ne fosse una. In C # le direttive del preprocessore vengono usate per aiutare nella compilazione condizionale. A differenza delle direttive C e C ++, non vengono utilizzate per creare macro. Una direttiva del preprocessore deve essere l'unica istruzione su una riga.

Direttive del preprocessore in C #

La tabella seguente elenca le direttive del preprocessore disponibili in C # -

Sr.No. Direttiva e descrizione del preprocessore
1

#define

Definisce una sequenza di caratteri, chiamata simbolo.

2

#undef

Ti permette di indefinire un simbolo.

3

#if

Consente di testare uno o più simboli per vedere se restituiscono true.

4

#else

Permette di creare una direttiva condizionale composta, insieme a #if.

5

#elif

Consente di creare una direttiva condizionale composta.

6

#endif

Specifica la fine di una direttiva condizionale.

7

#line

Consente di modificare il numero di riga del compilatore e (facoltativamente) l'output del nome del file per errori e avvisi.

8

#error

Consente di generare un errore da una posizione specifica nel codice.

9

#warning

Consente di generare un avviso di livello uno da una posizione specifica nel codice.

10

#region

Consente di specificare un blocco di codice che è possibile espandere o comprimere quando si utilizza la funzionalità di struttura dell'Editor di codice di Visual Studio.

11

#endregion

Segna la fine di un blocco #region.

Il preprocessore #define

La direttiva del preprocessore #define crea costanti simboliche.

#define consente di definire un simbolo in modo tale che, utilizzando il simbolo come espressione passata alla direttiva #if, l'espressione restituisca true. La sua sintassi è la seguente:

#define symbol

Il seguente programma lo illustra:

#define PI 
using System;

namespace PreprocessorDAppl {
   class Program {
      static void Main(string[] args) {
         #if (PI)
            Console.WriteLine("PI is defined");
         #else
            Console.WriteLine("PI is not defined");
         #endif
         Console.ReadKey();
      }
   }
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

PI is defined

Direttive condizionali

È possibile utilizzare la direttiva #if per creare una direttiva condizionale. Le direttive condizionali sono utili per testare uno o più simboli per verificare se restituiscono true. Se restituiscono true, il compilatore valuta tutto il codice compreso tra #if e la direttiva successiva.

La sintassi per la direttiva condizionale è -

#if symbol [operator symbol]...

Dove, symbol è il nome del simbolo che vuoi testare. È inoltre possibile utilizzare true e false o anteporre al simbolo l'operatore di negazione.

Il simbolo dell'operatore è l'operatore utilizzato per valutare il simbolo. Gli operatori potrebbero essere uno dei seguenti:

  • == (uguaglianza)
  • ! = (disuguaglianza)
  • && (e)
  • || (o)

Puoi anche raggruppare simboli e operatori con parentesi. Le direttive condizionali vengono utilizzate per compilare codice per una build di debug o durante la compilazione per una configurazione specifica. Una direttiva condizionale che inizia con a#if la direttiva deve essere terminata esplicitamente con a #endif direttiva.

Il seguente programma dimostra l'uso di direttive condizionali:

#define DEBUG
#define VC_V10
using System;

public class TestClass {
   public static void Main() {
      #if (DEBUG && !VC_V10)
         Console.WriteLine("DEBUG is defined");
      #elif (!DEBUG && VC_V10)
         Console.WriteLine("VC_V10 is defined");
      #elif (DEBUG && VC_V10)
         Console.WriteLine("DEBUG and VC_V10 are defined");
      #else
         Console.WriteLine("DEBUG and VC_V10 are not defined");
      #endif
      Console.ReadKey();
   }
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

DEBUG and VC_V10 are defined