C#

Подробнее о директивах препроцессора

в этой главе было изложено, как вы могли использовать символы # совместно с условными операторами, чтобы компилировать код согласно неким условиям. На тех-ш м жаргоне это называется кодом препроцессора (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 ':тавляемая им информация очень ограничена, вы из нее не узнаете, какие города вали