Поделиться через


#if (Справочник по C#)

При обнаружении компилятором C# директивы #if, за которой далее следует директива #endif, компиляция кода между двумя директивами выполняется только в том случае, если определен указанный символ. В отличие от C и C++, символу нельзя присвоить числовое значение; оператор #if языка C# принадлежит типу Boolean, и он только проверяет, определен ли символ. Например:

#define DEBUG
// ...
#if DEBUG
    Console.WriteLine("Debug version");
#endif

Операторы == (равенство), != (неравенство) можно использовать только для проверки возвращаемых ими значений true или false. Значение True означает, что символ определен. Оператор #if DEBUG имеет то же значение, что и оператор #if (DEBUG == true). Для оценки наличия определений нескольких символов можно использовать операторы && (и) и || (или). Можно группировать символы и операторы при помощи скобок.

Заметки

Оператор #if, вместе с операторами #else, #elif, #endif, #define и #undef, позволяет включать или исключать код на основе существования одного или нескольких символов. Это особенно полезно при компиляции кода для построения отладки или при компиляции для определенной конфигурации.

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

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

Также можно определить символ с помощью параметра компилятора /define. Для отмены определения символа служит директива #undef.

Символ, определенный с помощью /define или #define, не конфликтует с одноименной переменной. Имя переменной не должно передаваться директиве предварительной обработки, а символ может вычисляться только директивой предварительной обработки.

Область символа создается с помощью директивы #define в файле, в котором символ был определен.

Пример

// preprocessor_if.cs
#define DEBUG
#define MYTEST
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !MYTEST)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
        Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
        Console.WriteLine("DEBUG and MYTEST are defined");
#else
        Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
    }
}
  

См. также

Ссылки

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

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Справочник по C#