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

на главную

Жанры

Полное руководство. С# 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

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

Соль этого лета

Рам Янка
1. Самбисты
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Соль этого лета

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Золушка вне правил

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.83
рейтинг книги
Золушка вне правил

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Последний попаданец 12: финал часть 2

Зубов Константин
12. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 12: финал часть 2

Раб и солдат

Greko
1. Штык и кинжал
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Раб и солдат

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Последний попаданец

Зубов Константин
1. Последний попаданец
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Последний попаданец

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности