Директивы препроцессора дают инструкции компилятора для предварительной обработки информации перед собственно компиляцией.
Все директивы препроцессора начинаются с #, и только пробелы могут быть перед директивой препроцессора на линии. Директивы препроцессора не выражения, поэтому они не заканчивается точкой с запятой (;).
C# компилятор не имеет отдельный препроцессор, тем не менее, директивы обрабатываются, как если бы он там был. В C# директивы препроцессора используются, чтобы помочь в условной компиляции. В отличие от C и C + + директивы, они не используются для создания макросов. Директива препроцессора должна быть единственной инструкцией по линии.
В следующей таблице перечислены директивы препроцессора доступны в C#:
Директивы препроцессора | Описание |
---|---|
#define | Определяет символ. |
#undef | Позволяет отменить определение символа. |
#if | Позволяет тестировать символ или символы, чтобы увидеть, если они истина. |
#else | Позволяет создавать директивы условий, наряду с #if. |
#elif | Позволяет создать составную условную директиву. |
#endif | Определяет конец условной директивы. |
#line | Позволяет изменить номер строки компилятора и (необязательно) вывод имени файла для ошибок и предупреждений. |
#error | Позволяет создавать ошибку первого уровня из определенного места в коде. |
#warning | Позволяет создавать предупреждение первого уровня из определенного места в коде. |
#region | Позволяет указать блок кода, который можно разворачивать и сворачивать с помощью функции структурирования в редакторе кода Visual Studio. |
#endregion | Отмечает конец блока #region. |
Директива препроцессора #define создает символьную константу.
#define позволяет определить символ, такой, что, используя символ как выражение передаваемое директиве #if, оно будет вычисляться как истина. Синтаксис выглядит следующим образом:
#define symbol
Следующая программа иллюстрирует это:
#define PI
using System;
namespace PreprocessorDAppl
{
class Program
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine("PI определено");
#else
Console.WriteLine("PI не определено");
#endif
Console.ReadKey();
}
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
PI определено
Вы можете использовать директиву #if для создания условной директивы. Условные директивы полезны для проверки символов. Если выражение истина, компилятор вычисляет весь код между #if и следующей директивой.
Синтаксис для условной директивы:
#if symbol [operator symbol]...
Где, symbol это имя символа, который необходимо проверить. Вы также можете использовать true и false или перед символ с оператором отрицания.
operator symbol это оператор использующийся для проверки символа. Операторы могут быть одним из следующих:
Можно также группировать символы и операторы внутри скобок. Условные директивы используются для компиляции кода при построении отладки или при компиляции для конкретной конфигурации. Условные директивы начинаются с директивы #if, а заканчиваются директивой#endif.
Следующая программа демонстрирует использование условных директив:
#define DEBUG
#define VC_V10
using System;
public class TestClass
{
public static void Main()
{
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG определен");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 определен");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG и VC_V10 определен");
#else
Console.WriteLine("DEBUG и VC_V10 неопределен");
#endif
Console.ReadKey();
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
DEBUG и VC_V10 определен