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

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

Жанры

Полное руководство. С# 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.50
рейтинг книги
Хозяйка старой пасеки

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Не грози Дубровскому! Том III

Панарин Антон
3. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том III

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Сердце Дракона. Том 9

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

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

Надуй щеки! Том 7

Вишневский Сергей Викторович
7. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 7

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

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

Антимаг его величества. Том III

Петров Максим Николаевич
3. Модификант
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Антимаг его величества. Том III

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия