Наименование Описание

#define, #undef Определение (например, #define DEBUG) и отмена определения (#undef DEBUG) символьной константы, которая используется директивами условной компиляции. Директивы размещаются до первой лексемы единицы компиляции. Допускается повторное определение одной и той же константы

#if, #elif, Директивы условной компиляции. Код, находящийся в области их

# else, #endif действия, компилируется или пропускается в зависимости от того, была ли ранее определена символьная константа (см. далее) Задание номера строки и имени файла, о котором выдаются сообщения, возникающие при компиляции (например, #line 200 "ku_ku.txt"). При этом в диагностических сообщениях компилятора имя компилируемого файла заменяется указанным, а строки нумеруются, начиная с заданного первым параметром номера1

#еггог, Вывод при компиляции сообщения, указанного в строке директивы.

#warning После выполнения директивы #еггог компиляция прекращается

(например, #еггог Дальше компилировать нельзя). После выполнения директивы #warning компиляция продолжается

#region, Определение фрагмента кода, который можно будет свернуть или

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

этими директивами

#pragma Введена в версии С# 2.0. Позволяет отключить (#pragma warning disable) или восстановить (#pragma warning restore) выдачу всех или перечисленных в директиве предупреждений компилятора

Формат директив:

#if константное_выражение

[ #elif константное_выражение

]

[ #elif константное_выражение

... ]

[#else

]

#endif

Количество директив #elif произвольно. Исключаемые блоки кода могут со­держать как описания, так и исполняемые операторы. Константное выражение может содержать одну или несколько символьных констант, объединенных знаками операций ==,!=,!, && и ||. Также допускаются круглые скобки. Кон­станта считается равной true, если она была ранее определена с помощью ди­рективы #define.

Пример применения директив приведен в листинге 12.4.

Листинг 12.4. Применение директив условной компиляции

// #define VAR1

// #define VAR2

using System;

namespace ConsoleApplication1

{

class Class1

{

#if VAR1

static void F(){ Console.WriteLine("Вариант 1"); }

#elif VAR2

static void F(){ Console.WriteLine("Вариант 2"): }

#else

static void F() { Console.WriteLine("Основной вариант"); }

#endif

static void Main()

{

F();

}

}

}

В зависимости от того, определение какой символьной константы раскомменти­ровать, в компиляции будет участвовать один из трех методов F.

Директива #define применяется не только в сочетании с директивами условной компиляции. Можно применять ее вместе со стандартным атрибутом Conditional для условного управления выполнением методов. Метод будет выполняться, если константа определена. Пример приведен в листинге 12.5. Обратите внима­ние на то, что для применения атрибута необходимо подключить пространство имен System.Diagnostics.

Листинг 12.5. Использование атрибута Conditional

// #define VAR1

// #define VAR2

using System;

using System.Diagnostics;

namespace ConsoleApplication1

{

class Class1

{

[Conditional("VAR1")]

static void A() { Console.WriteLine("Выпопняется метод А"); }

[Conditional("VAR2")]

static void B() { Console.WriteLine("Выполняется метод В"); }

static void Main()

{

АО;

ВО;

}

}

}

В методе Main записаны вызовы обоих методов, однако в данном случае будет выполнен только метод В, поскольку символьная константа VAR1 не определена.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: