Директивы препроцессора предоставляют инструкции компилятору для предварительной обработки информации до начала фактической компиляции.
Все директивы препроцессора начинаются с #, и перед директивой препроцессора на строке могут появляться только символы пробела. Директивы препроцессора не являются инструкциями, поэтому они не заканчиваются точкой с запятой (;).
Компилятор 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
0 комментариев