Директивы препроцессора предоставляют инструкции компилятору для предварительной обработки информации до начала фактической компиляции.

Все директивы препроцессора начинаются с #, и перед директивой препроцессора на строке могут появляться только символы пробела. Директивы препроцессора не являются инструкциями, поэтому они не заканчиваются точкой с запятой (;).

Компилятор C # не имеет отдельного препроцессора; однако директивы обрабатываются так, как если бы они были. В C # директивы препроцессора используются, чтобы помочь в условной компиляции. В отличие от директив C и C ++, они не используются для создания макросов. Директива препроцессора должна быть единственной инструкцией на линии.

Директивы препроцессора в C #

В следующей таблице перечислены директивы препроцессора, доступные в C # -

#define

Он определяет последовательность символов, называемых символами.

#undef

Это позволяет вам определить символ.

#if

Он позволяет тестировать символ или символы, чтобы увидеть, соответствуют ли они истине.

#else

Это позволяет создать составную условную директиву вместе с #if.

#elif

Это позволяет создать составную условную директиву.

#endif

Указывает конец условной директивы.

#line

Он позволяет вам изменить номер строки компилятора и (опционально) вывод имени файла для ошибок и предупреждений.

#error

Это позволяет генерировать ошибку из определенного места в вашем коде.

#warning

Это позволяет генерировать предупреждение уровня один из определенного места в вашем коде.

#region

Он позволяет указать блок кода, который можно развернуть или свернуть при использовании функции выделения редактора кода Visual Studio.

#endregion

Он отмечает конец блока #region.

Префикс #define

Директива префикса #define создает символические константы. #define позволяет определить символ таким образом, что, используя символ в качестве выражения, переданного директиве #if, выражение оценивается как true. Его синтаксис выглядит следующим образом:

#define symbol

Следующая программа иллюстрирует это:

#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();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

PI is defined

Условные директивы

Вы можете использовать директиву #if для создания условной директивы. Условные директивы полезны для тестирования символа или символов, чтобы проверить, соответствуют ли они true. Если они оценивают значение true, компилятор оценивает весь код между #if и следующей директивой.

Синтаксис для условной директивы:

#if symbol [operator symbol]...

Где, символ - это имя символа, который вы хотите проверить. Вы также можете использовать true и false или добавить символ с помощью оператора отрицания.

Символ оператора - это оператор, используемый для оценки символа. Операторы могут быть либо следующими:

  • == (равенство)
  • ! = (неравенство)
  • && (а также)
  • || (или)

Вы также можете группировать символы и операторы с круглыми скобками. Условные директивы используются для компиляции кода для сборки отладки или при компиляции для определенной конфигурации. Условная директива, начинающаяся с директивы #if, должна быть явно прервана директивой #endif .

Следующая программа демонстрирует использование условных директив:

#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();
   }
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

DEBUG and VC_V10 are defined