Программирование >>  Обработка исключительных ситуаций 

1 ... 92 93 94 [ 95 ] 96 97 98 ... 142


Таблица 12.4. Директивы препроцессора

Наименование fdefine, fundef

#if,#elif, felse, fendif

#line

terror, fwarning

#region, fendregion

fpragma

Описание

Определение (например, #def i ne DEBUG) и отмена определения (fundef DEBUG) символьной константы, которая используется директивами условной компиляции. Директивы размещаются до первой лексемы единицы компиляции. Допускается повторное определение одной и той же константы

Директивы условной компиляции. Код, находящийся в области их действия, компилируется или пропускается в зависимости от того, была ли ранее определена символьная константа (см. далее)

Задание номера строки и имени файла, о котором выдаются сообщения, возникающие при компиляции (например, #1 iпе 200 ku ku.txt ). При этом в диагностических сообщениях компилятора имя компилируемого файла заменяется указанным, а строки нумеруются, начиная с заданного первым параметром номера

Вывод при компиляции сообщения, указанного в строке директивы. После выполнения директивы f error компиляция прекращается (например, ferror Дальше компилировать нельзя). После выполнения директивы learning компиляция продолжается

Определение фрагмента кода, который можно будет свернуть или развернуть средствами редактора кода. Фрагмент располагается между этими директивами

Введена в версии С# 2.0. Позволяет отключить (#pragma warning disable) или восстановить (#pragma warning restore ) выдачу всех или перечисленных в директиве предупреждений компилятора

Формат директив:

#if константноевыражение

[ #e1if константноевыражение ...]

[ #elif константноевыражение ...]

[ #else

... ]

#endif

Количество директив #elif произвольно. Исключаемые блоки кода могут содержать как описания, так и исполняемые операторы. Константное выражение может содержать одну или несколько символьных констант, объединенных знаками операций = = , ! =, !, && и 11. Также допускаются круглые скобки. Константа считается равной true, если она была ранее определена с помощью директивы #def i ne.

...Натуре находится много вещей, неизъяснимых даже для обширного ума . -

Н. В. Гоголь.



Пример применения директив приведен в листинге 12.4.

Листинг 12.4. Применение директив условной компиляции #derine #derine using System;

namespace ConsoleApplicationi

class Classl

#if VA

static voidF(){ Console.WriteLine( Вариант 1 ): }

#elif

static void F(){ Console.WriteLineC Вариант 2 ); }

#el se

static void F(){ Console.WriteLineC Основной вариант ); }

#endif

static void MainO

В зависимости от того, определение какой символьной константы раскомментировать, в компиляции будет участвовать один из трех методов F.

Директива #def i пе применяется не только в сочетании с директивами условной компиляции. Можно применять ее вместе со стандартным атрибутом Conditional для условного управления выполнением методов. Метод будет выполняться, если константа определена. Пример приведен в листинге 12.5. Обратите внимание на то, что для применения атрибута необходимо подключить пространство имен System.Diagnostics.

Листинг 12.5. Использование атрибута Conditional

#define VAR1

fdefine using System; using System.Diagnostics: namespace ConsoleApplicationi

class Classl

[Conditional ( VAR1 )]

static void A(){ Console.WriteLineC Выполняется метод A ); }

[Conditional ( VAR2 )]



Глава 12. Сборки, библиотеки, атрибуты, директивы

Листинг 12,5 (продолжение)

static void В(){ Console.WriteLineC В1полняется метод В ); }

static void MainO

АО: BO;

В методе Main записаны вызовы обоих методов, однако в данном случае будет выполнен только метод В, поскольку символьная константа VAR1 не определена.

Рекомендации по программированию

В этой главе приведено краткое введение в средства, использующиеся при профессиональной разработке программ: библиотеки, рефлексия типов, атрибуты, пространства имен и директивы препроцессора. Для реального использования этих возможностей в программах необходимо изучать документацию и дополнительную литературу, например [20], [21], [26], [27], [30].



1 ... 92 93 94 [ 95 ] 96 97 98 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика