612___________________________________________Глава

ftelse                                                               
фрагмент кода 3                                                  
ftendif

фрагмент кода 1 будет компилироваться, если выполняется условие 1, фра
кода 2 будет компилироваться, если выполняется условие 2, а фрагмент кода
дет компилироваться, если не выполняется ни одно из предыдущих услови^^И

Условная компиляция может быть полезна во многих случаях. Наприме
редко в процессе отладки приложения в него полезно ввести различные отл
ные печати, позволяющие следить за ходом выполнения программы (см. гл
раздел 2.4.8.11). Если вы не хотите, чтобы эти печати оставались в окончател
варианте программы, вы можете в разных местах приложения ввести конс
ции вида                                                          

ftifdef Debug                                                      
операторы отладки                                                 

Тогда, если в начале программы вы введете директиву              

ftdefine Debug                                                    

операторы отладки будут компилироваться и выполняться. Но когда вы уб
или закомментируете эту директиву #define, определяющую введенный 
идентификатор Debug, все операторы отладки исчезнут из текста. Можно п
пить даже проще, ничего не изменяя в тексте, а оперируя опцией Conditionа
странице Directories/Conditionals диалогового окна Project Options (см. в глав
раздел 13.2.2.7).                                                     

Конечно, вы могли бы поступить иначе: ввести переменную булева типа
bug, задать ей в начале выполнения приложения значение true и оформлят
ладки следующим образом:                                          

#if (Debug)

{

   операторы отладки                                               

}

Если в дальнейшем заменить задаваемое значение Debug на false, то one
ры отладки перестанут выполняться. Отличие этого подхода от использованными
ректив препроцессора заключается в том, что коды операторов отладки в этом
чае останутся в тексте программы, увеличивая размер выполняемого модул
директивы условной компиляции просто уберут отладочный код из програм

Приведем еще один пример использования условной компиляции. Если
взглянете на заголовочный файл любого модуля формы вашего приложениями
увидите, что C+4-Builder первыми операторами вставляет в него директивы вид

ifndef UnitlH                                                    
define UnitlH                                                    

А завершается заголовочный файл директивой

#endif

Что это дает? Это позволяет исключить зацикливание при циклических
рективах #include, включающих в различных модулях заголовочные файлы 
друга. Когда в приложение первый раз включается модуль Unitl.h, то выполн
ся указанные выше первые две директивы и идентификатор UnitlH оказыва
определен. После этого компилируется текст файла. Но если в результате ди
тив #include этот же файл будет включаться еще один раз, то обнаружится
идентификатор UnitlH уже определен и повторной компиляции файла не 