Условная компиляция

Условная компиляция

Другой пакет директив препроцессора (#if, #elif, #else, #endif) позволяет выполнить компиляцию блока программного кода по условию, базируясь на предварительно заданных символах. Классическим вариантом использования этих директив является идентификация блока программного кода, который компилируется только при отладке (а не при окончательной компоновке).

class Program

 static void Main(string[] args) {

  // Этот программный код выполняется только при отладочной

  // компиляции проекта.

#if DEBUG

  Console.WriteLine("Каталог приложения: {0}", Environment.CurrentDirectory);

  Console.WriteLine("Блок: {0}", Environment.MachineName);

  Console.WriteLine("ОС: {0}", Environment.OSVersion);

  Console.WriteLine("Версия .NET: {0}", Environment.Version);

#endif

 }

}

Здесь выполняется проверка на символ DEBUG. Если он присутствует, выводится ряд данных состояния, для чего используются соответствующие статические члены класса System.Environment. Если символ DEBUG не обнаружен, то программный код, размещенный между #if и #endif, компилироваться не будет и в результирующий компоновочный блок не войдет, т.е. будет фактически проигнорирован.

По умолчанию Visual Studio 2005 всегда определяет символ DEBUG, однако такое поведение можно отменить путем снятия отметки флажка Define DEBUG constant (Определить константу DEBUG) на вкладке Build (Сборка), размещенной на странице Properties (Свойства) вашего проекта. В предположении о том, что этот обычно генерируемый символ DEBUG отключен, можно определить этот символ для каждого файла в отдельности, используя директиву препроцессора #define.

#define DEBUG using System;

namespace Preprocessor {

 class ProcessMe {

  static void Main(string[] args) {

   // Программный код, подобный показанному выше…

}

 }

}

Замечание. Директивы #define в файле с программным кодом C# должны быть указаны до всех остальных.

Можно также определять свои собственные символы препроцессора. Предположим, например, что у нас есть класс C#, которой должен компилироваться немного иначе в рамках дистрибутива Mono.NET (см. главу 1). Используя #define, можно определить символ MONO_BUILD для каждого файла.

#define DEBUG

#define MONO_BUILD

using System;

namespace Preprocessor {

 class Program {

  static void Main (string[] args) {

#if MONO_BUILD

   Console.WriteLine("Компиляция для Mono!");

#else

   Consоlе.WriteLine("Компиляция для Microsoft .NET");

#endif

  }

 }

}

Чтобы создать символ, применимый для всего проекта, используйте текстовый блок Conditional compilation symbols (Символы условной компиляции, размещенный на вкладке Build (Сборка) страницы свойств проекта (рис. 9.6).

Рис. 9.6. Определение символа препроцессора для применения в рамках всего проекта

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1.1.2 Компиляция

Из книги C++ автора Хилл Мюррей

1.1.2 Компиляция Откуда появились выходной поток cout и код, реализующий операцию вывода ««? Для получения выполняемого кода написанная на С++ программа должна быть скомпилирована. По своей сути процесс компиляции такой же, как и для С, и в нем участвует большая часть входящих


7.13 Условная Операция

Из книги Fedora 8 Руководство пользователя автора Колисниченко Денис Николаевич

7.13 Условная Операция условное_выражение: выражение ? выражение : выражениеУсловная операция группирует слева направо. Вычисляется первое выражение, и если оно не 0, то результатом является значение второго выражения, в противном случае значение третьего выражения. Если


11.3 Условная Компиляция

Из книги 200 лучших программ для Linux автора Яремчук Сергей Акимович

11.3 Условная Компиляция Командная строка компилятора вида#if выражениепроверяет, является ли результатом вычисления выражения не-ноль. Выражение должно быть константным выражением, котрые обсуждаются в #12. Кроме обычных операций С++ может ипользоваться унарная операция


3.4.3. Компиляция

Из книги Справочное руководство по C++ автора Страустрап Бьярн

3.4.3. Компиляция Как правило, исходные коды программ распространяются в виде архива с "двойным расширением" -.tar.gz. Исходный код принято распаковывать в каталог /usr/src. Поэтому для распаковки архива вам нужно выполнить следующие команды:sucd /usr/srcgunzip архив.tar.gztar xvf


Компиляция программ

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Компиляция программ Даже после появления пакетов, которые представляли собой уже скомпилированные программы, компиляция долгое время оставалась и для некоторых остается основным средством установки. Примечание Первые прекомпилированные наборы появились в


R.16.5 Условная трансляция

Из книги Технология XSLT автора Валиков Алексей Николаевич

R.16.5 Условная трансляция С помощью препроцессора можно организовать условную трансляцию программы. Синтаксически это задается следующим образом:условное: часть-if части-elif opt часть-else opt строка-endifчасть-if: строка-if текстстрока-if: # if выражение-константа # ifdef


Условная Инструкция (Conditional)

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Условная Инструкция (Conditional) Эта инструкция задает различные формы обработки в зависимости от выполнения определенных условий. Основная форма:if boolean_expression theninstruction; instruction; ...elseinstruction; instruction; ...endгде каждая ветвь может иметь произвольное число инструкций (а возможно и не


Условная обработка

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Условная обработка В XSLT имеются две инструкции, которые поддерживают условную обработку — xsl:if и xsl:choose. Инструкция xsl:if позволяет создавать простые условия типа "если-то", в то время как xsl:choose создает более сложную конструкцию для выбора одной из нескольких имеющихся


Условная операция

Из книги QNX/UNIX [Анатомия параллелизма] автора Цилюрик Олег Иванович

Условная операция В языке Си имеется одна тернарная операция — уловная. Она имеет следующий синтаксис:<операнд1> ? <операнд2>: <операнд3>Выражение <операнд1> вычисляется и сравнивается с нулем. Выражение может иметь целый, плавающий тип, либо быть указателем.


Условная компиляция

Из книги Linux программирование в примерах автора Роббинс Арнольд

Условная компиляция В этом разделе описываются директивы, которые управляют условной компиляцией. Эти директивы позволяют исключить из процесса компиляции какие-либо части исходного файла посредством проверки условий (константных


8.5. Условная подстановка параметров

Из книги Язык Си - руководство для начинающих автора Прата Стивен

8.5. Условная подстановка параметров Условная подстановка позволяет проверить, установлен ли определенный параметр, или использовать вместо его значения другое. Значение самого параметра при этом не изменяется. Допустимые виды условных подстановок перечислены в


28.2. Компиляция модуля

Из книги Операционная система UNIX автора Робачевский Андрей М.

28.2. Компиляция модуля Компилировать мы будем файл module.c. Для этого понадобится установленный компилятор gcc, заголовочные файлы и исходные тексты ядра. Если вы дочитали книгу до этой главы, то у вас уже должны быть установлены пакеты:1. cpp — препроцессор cpp;2. binutils — набор


Условная переменная

Из книги автора

Условная переменная Одним из важнейших принципов использования мьютексов является максимальное сокращение размеров критической секции, то есть участка, который потоки должны проходить последовательно. Однако зачастую возникает необходимость ожидания выполнения


15.2. Компиляция для отладки

Из книги автора

15.2. Компиляция для отладки Для использования отладчика исходного кода, отлаживаемый исполняемый файл должен быть откомпилирован с опцией компилятора -g. Эта опция заставляет компилятор внедрять в объектный код дополнительные отладочные идентификаторы; то есть


Почему компиляция?

Из книги автора

Почему компиляция? Читатели, пользовавшиеся языком Бейсик, могут удивиться, зачем столько шагов для того, чтобы выполнить программу. Кажется, что такой способ компиляции требует больше времени (и в некоторых случаях это может быть действительно так). Но, поскольку в


Компиляция

Из книги автора

Компиляция Процедура создания большинства приложений является общей и приведена на рис. 2.2. Рис. 2.2. Схема компиляции программыПервой фазой является стадия компиляции, когда файлы с исходными текстами программы, включая файлы заголовков, обрабатываются компилятором