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

на главную - закладки

Жанры

Полное руководство. С# 4.0
Шрифт:

Вот к какому результату приводит выполнение этой программы. Компилируется для экспериментальной версии. Это не пробная экспериментальная версия. Присутствует во всех версиях.

В данном примере идентификатор 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

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

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

компиляция прерывается и выводится

сообщение "Это тестовая ошибка!". Директива #warning

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

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

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

А во втором варианте директива #line указывается с ключевым словом hidden. При пошаговой отладке программы строки кода, находящиеся между директивой #line hidden

и следующей директивой #line без ключевого слова hidden, пропускаются отладчиком. Директивы #region и #endregion

С помощью директив #region и #endregion определяется область, которая раз ворачивается или сворачивается при структурировании исходного кода в интегриро ванной среде разработки Visual Studio. Ниже приведена общая форма этих директив: #region текст // последовательность кода #endregion текст

где текст обозначает необязательную символьную строку. Директива #pragma

С помощью директивы #pragma инструкции задаются компилятору в виде опций. Ниже приведена общая форма этой директивы: #pragma опция

где опция обозначает инструкцию, передаваемую компилятору.

В текущей версии C# предусмотрены две опции для директивы #pragma. Первая из них, warning, служит для разрешения или запрета отдельных предупреждений со стороны компилятора. Она принимает две формы: #pragma warning disable предупреждения #pragma warning restore предупреждения

где предупреждения обозначает разделяемый запятыми список номеров предупре ждений. Для отмены предупреждения используется опция disable, а для его разре шения — опция restore.

Например, в приведенной ниже директиве #pragma запрещается выдача предупре ждения №168, уведомляющего о том, что переменная объявлена, но не используется. #pragma warning disable 168

Второй для директивы #pragma является опция checksum. Она служит для форми рования контрольной суммы в проектах ASP.NET. Ниже приведена ее общая форма: #pragma checksum "имя_файла" "{GUID}" "контрольная_сумма"

где имяфайла обозначает конкретное имя файла; GUID — глобально уникальный идентификатор, с которым связано имяфайла; контрольная_сумма — шестнадцате ричное число, представляющее контрольную сумму. У этой контрольной суммы долж но быть четное число цифр. Сборки и модификатор доступа internal

Поделиться:
Популярные книги

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Жена проклятого некроманта

Рахманова Диана
Фантастика:
фэнтези
6.60
рейтинг книги
Жена проклятого некроманта

Камень. Книга шестая

Минин Станислав
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Камень. Книга шестая

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Комбинация

Ланцов Михаил Алексеевич
2. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Комбинация

Испытание Огня

Гаврилова Анна Сергеевна
3. Академия Стихий
Фантастика:
фэнтези
9.43
рейтинг книги
Испытание Огня

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Ведьмак. Перекресток воронов

Сапковский Анджей
Фантастика:
фэнтези
5.00
рейтинг книги
Ведьмак. Перекресток воронов

Сердце Дракона. Том 20. Часть 1

Клеванский Кирилл Сергеевич
20. Сердце дракона
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 20. Часть 1

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Герцог и я

Куин Джулия
1. Бриджертоны
Любовные романы:
исторические любовные романы
8.92
рейтинг книги
Герцог и я