Добавить в цитаты Настройки чтения

Страница 249 из 502

<b>    #if EXPERIMENTAL &amp;&amp; TRIAL</b>

<b>    Console.Error.WriteLine(&quot;Проверка пробной экспериментальной версии.&quot;);</b>

<b>    #else</b>

<b>    Console.Error.WriteLine(&quot;Это не пробная экспериментальная версия.&quot;);</b>

<b>    #endif</b>

<b>    Console.WriteLine(&quot;Присутствует во всех версиях.&quot;);</b>

<b>  }</b>

<b>}</b>

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

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

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

<b>Присутствует во всех версиях.</b>

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

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

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

<b>#if идентификаторное_выражение</b>

<b>последовательность операторов</b>

<b>#elif идентификаторное_выражение</b>

<b>последовательность операторов</b>

<b>#elif идентификаторное_выражение</b>

<b>последовательность операторов // . . .</b>

<b>#endif</b>

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

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

<b>#define RELEASE</b>

<b>using System;</b>

<b>class Test {</b>

<b>  static void Main() {</b>

<b>    #if EXPERIMENTAL</b>

<b>    Console.WriteLine(&quot;Компилируется для экспериментальной версии.&quot;);</b>

<b>    #elif RELEASE</b>

<b>    Console.WriteLine(&quot;Компилируется для окончательной версии.&quot;);</b>

<b>    #else</b>

<b>    Console.WriteLine(&quot;Компилируется для внутреннего тестирования.&quot;);</b>

<b>    #endif</b>

<b>    #if TRIAL &amp;&amp; !RELEASE</b>

<b>    Console.WriteLine(&quot;Пробная версия. &quot;) ;</b>

<b>    #endif</b>

<b>    Console.WriteLine(&quot;Присутствует во всех версиях.&quot;);</b>

<b>  }</b>

<b>}</b>

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

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

<b>Присутствует во всех версиях.</b>

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

<b>#undef <i>идентификатор</i></b>

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

<b>#define SMALL</b>

<b>#if SMALL </b>

<b>// . . .</b>

<b>#undef SMALL</b>

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

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

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

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

<b>#еrror сообщение_об_ошибке</b>