Чтение онлайн

ЖАНРЫ

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

// Продемонстрировать применение директивы #else.

#define EXPERIMENTAL

using System;

class Test {

static void Main {

#if EXPERIMENTAL

Console.WriteLine("Компилируется для экспериментальной версии.");

#else

Console.WriteLine("Компилируется для окончательной версии.");

#endif

#if EXPERIMENTAL && TRIAL

Console.Error.WriteLine("Проверка

пробной экспериментальной версии.");

#else

Console.Error.WriteLine("Это не пробная экспериментальная версия."); #endif

Console.WriteLine("Присутствует во всех версиях.");

}

}

Вот к какому результату приводит выполнение этой программы.

Компилируется для экспериментальной версии.

Это не пробная экспериментальная версия.

Присутствует во всех версиях.

В данном примере идентификатор TRIAL не определен, и поэтому часть #else второй условной последовательности кода не компилируется.

Обратите внимание на то, что директива #else обозначает конец блока директивы #if и в то же время — начало блока самой директивы #else. Это необходимо потому, что с любой директивой #if может быть связана только одна директива #endif. Более того, с любой директивой #if может быть связана только одна директива #else.

Обозначение #elif означает "иначе если", а сама директива #elif определяет последовательность условных операций if-else-if для многовариантной компиляции. После директивы #elif указывается идентификаторное выражение. Если это выражение истинно, то компилируется следующий далее кодовый блок, а остальные выражения директивы #elif не проверяются. В противном случае проверяется следующий по порядку блок. Если же ни одну из директив #elif не удается выполнить, то при наличии директивы #else выполняется последовательность кода, связанная с этой директивой, а иначе не компилируется ни один из кодовых блоков директивы #if. Ниже приведена общая форма директивы #elif.

#if идентификаторное_выражение последовательность операторов #elif идентификаторное_выражение последовательность операторов #elif идентификаторное_выражение последовательность операторов // . . .

#endif

В приведенном ниже примере демонстрируется применение директивы #elif.

// Продемонстрировать применение директивы #elif.

#define RELEASE

using System;

class Test {

static void Main {

#if EXPERIMENTAL

Console.WriteLine("Компилируется для экспериментальной версии.");

#elif RELEASE

Console.WriteLine("Компилируется

для окончательной версии.");

#else

Console.WriteLine("Компилируется для внутреннего тестирования."); #endif

#if TRIAL && !RELEASE

Console.WriteLine("Пробная версия. ") ;

#endif

Console.WriteLine("Присутствует во всех версиях.");

}

}

Этот код выдает следующий результат.

Компилируется для окончательной версии.

Присутствует во всех версиях.

Директива #undef

С помощью директивы #undef удаляется определенный ранее идентификатор. Это, по существу, означает, что он становится "неопределенным". Ниже приведена общая форма директивы #undef.

#undef идентификатор

Рассмотрим следующий пример кода.

#define SMALL

#if SMALL // . . .

#undef SMALL

// теперь идентификатор SMALL не определен.

После директивы #undef идентификатор SMALL уже оказывается неопределенным.

Директива #undef применяется главным образом для локализации идентификаторов только в тех фрагментах кода, в которых они действительно требуются.

Директива #еггог

Директива #error вынуждает компилятор прервать компиляцию. Она служит в основном для отладки. Ниже приведена общая форма директивы #еггог.

#еггог сообщение_об_ошибке

Когда в коде встречается директива terror, выводится сообщение об ошибке. Например, когда компилятору встречается строка кода

#еггог Это тестовая ошибка!

компиляция прерывается и выводится сообщение "Это тестовая ошибка ! ".

Директива #warning

Директива #warning действует аналогично директиве terror, за исключением того, что она выводит предупреждение, а не ошибку. Следовательно, компиляция не прерывается. Ниже приведена общая форма директивы #warning.

#warning пр едупр еж да юще е_соо бще ние

Директива #line

Директива #line задает номер строки и имя файла, содержащего эту директиву. Номер строки и имя файла используются при выводе ошибок или предупреждений во время компиляции. Ниже приведена общая форма директивы #line.

#line номер ” имя_файла"

Имеются еще два варианта директивы #line. В первом из них она указывается с ключевым словом default, обозначающим возврат нумерации строк в исходное состояние, как в приведенном ниже примере.

Поделиться с друзьями: