    Если в программе возникли исключительные ситуации, которые не 
обрабатываются оператором catch, то вызывается функция unexpected(). 
Исключительные ситуации, которые не обрабатываются ни одним оператором catch, 
называются непредвиденными исключительными ситуациями. По-умолчанию функция 
unexpected() вызывает функцию terminate(), назначение которой поясняется ниже. 
    Непредвиденные исключительные ситуации могут возбуждаться программой при 
обнаружении повреждения стека или деструктором класса (опасная практика, 
резервируемая только для наиболее критических проблем), вследствие чего 
вызывается функция terminate(). По умолчанию функция terminate() вызывает 
функцию abort(), назначение которой объясняется ниже. 
    Функция abort() находится ниже всех на тотемном столбе и немедленно 
прерывает выполнение программы. Она никогда не вызывается непосредственно. 
Если не обработаны все возможные исключительные ситуации и не приняты 
дополнительные меры для перепрограммирования функций unexpected() и, возможно, 
terminate(), необработанная исключительная ситуация аварийно прервет выполнение 
программы путем обращения к abort(). Если программа добралась до этой стадии, 
ничто уже не поможет вам предотвратить ее завершение. (Между нами говоря, если 
программа непредвиденно завершается, вам следует заняться обработкой ошибок!) 

    ЗАМЕЧАНИЕ 

    В исходном коде нсволняющея системы Borland C++ функция terminate не вызвает 
непосредственно функцию abort(), как это диктует ANSI C++, В Borland C++ 4.5 функция 
termiate() просто завершает программу. Поскольку вы не можете заменить функцию abort(), 
это небольшое несоответствие не имеет отрицательных последствий, во вообще полезно 
думать, что в стандартной ситуации функция terminate() вызывает abort().

    Для демонстрации того, что происходит, когда программа не обрабатывает все 
возможные исключительные ситуации, сохраните копию ЕХСЕРТ2.СРР под другим 
именем (я использовал Х.СРР). Перепишите в ней функцию main() следующим образом: 

    int main() { 
      Instruct(); 
      Run(); 
      return 0; 
   } 

    Powег Demonstration	
    rhis program displays the result of raising	
    в value (bass) to a power (exponent). To	
    Force an exception, enter a negative base	
    Domian error: Ьаse

     Program Aborted

    Рис. 15.2. Windows- и EasyWin-приложения выводят это сообщение, если они 
завершаются из-за необработанной исключительной ситуации 

    Любые необработанные исключительные ситуации из функции Run() заставляют 
программу вызывать функцию unexpected(), вызывающую функцию terminate(), 
которая, в свою очередь, вызывает функцию abort(), завершающую выполнение 
программы. Приложения для DOS, завершающиеся подобным образом, выводят 
сообщение "Abnormal program termination" (Ненормальное завершение программы). 
WINDOWS и EasyWin-приложения завершаются, отображая окно диалога, показанное 
на рис. 15.2. За исключением простейших примеров и тестовых программ, вы 
обязаны сделать все возможное для предотвращения такого непредвиденного завершения. 


    Глава 16. Передовые средства C++ 411 
