Подробнее о директивах препроцессора
в этой главе было изложено, как вы могли использовать символы # совместно с условными операторами, чтобы компилировать код согласно неким условиям. На тех-ш м жаргоне это называется кодом препроцессора (preprocessing), а операторы — золш препроцессора (preprocessor directive). Директивы препроцессора, которые ге использовать, приведены в табл. 6.1.
Таблица 6.1. Доступные директивы препроцессора
Директива
Описание
#define
#undef
#ifи #endif
#elif
#else
#region и #endregion
Для определения идентификатора компиляции, такого как идентификатор INTEGRATE_TESTS в примерах этой главы. Он используется в начале файла исходного кода, чтобы активизировать условные операторы препро-цессора в файле исходного кода. Директива #def ine не распространяем¬ся на несколько файлов исходного кода
Для отмены идентификатора #def ine. Его можно использовать, если вь хотите изменить глобальную установку. Это возможно, когда идентификатс: установлен глобально, но для определенного файла исходного кода не-обходимо, чтобы идентификатор не был установлен. В этом случае вы ис-пользуете директиву #undef. Другой способ достижения того же эффекта заключается в использования символа ! перед идентификатором
Для условного включения или исключения фрагмента исходного кода. Вы используете условные директивы тогда, когда хотите определить кон¬фигурацию исходного кода для отладки или для рабочего построения. (Рабочее построение — это промежуточная версия программы между фор-мальной проверкой и окончательным выпуском)
Вместо одного блока #if вы могли бы иметь несколько условных операто¬ров. Вы используете директиву препроцессора #elif, когда имеете несколько типов кода, например для отладки, рабочая и окончательная
Блок кода по умолчанию, выполняющийся в случае, если не сработал ни один из операторов #if
Они не имеют абсолютно никакого отношения к компиляции исходного кода. Они используются средой Visual Studio для создания регионов ис-ходного кода, который можно "свернуть". Свертывание Означает временное сокрытие блока кода. (Это та же концепция, что и свертывание папок в про-воднике Windows.) Файл исходного кода может стать настолько длинным, что вы устанете постоянно листать его. Сворачивая код, вы экономите вре¬мя, хотя код все еще существует и компилируется правильно
Следующий пример демонстрирует использование директив препроцессора:
♦define ACTIVATE_1 #undef ACTIVATE_2
namespace TestDefine { class Example
{ #if ACTIVATE_1
int _dataMember; #elif !NO_ACTIVATE_10
int _dataMember3; #else
int _defaultValue; #endif
}
Как правило, вы используете директивы препроцессора, когда хотите получить раз¬ный код для режима отладки (debug mode) и режима выпуска (release mode). Режим отладки подразумевает компиляцию кода так, чтобы его можно было отлаживать и ана-
вг-сзать с использованием дружественных символов (pretty symbol). Режим выпуска (Pi-r/мевает компиляцию кода так, чтобы его можно было отлаживать и анализиро-- : уже без дружественных символов.
здлетку. Среда Visual C# Express не обеспечивает вам гибкости при выборе режима отладки к" :ежима выпуска при разработке. Для этого необходима полная версия Visual Studio.
Стайте дружественные символы заметками во время путешествия. Каждый раз, В ваш код выполняется в режиме отладки, он говорит, "Сейчас вы вызываете метод :-то файле исходного кода" или "Ой, код свойства в таком-то файле исходного работает неправильно". В режиме выпуска дружественные символы скорее по-I аа дорожные указатели: "До места х у километров". Символы помогают вам, но LZ ':тавляемая им информация очень ограничена, вы из нее не узнаете, какие города вали