ИСКЛЮЧЕНИЯ


ПЕРЕДАЧА ПАРАМЕТРОВ ЧЕРЕЗ РЕГИСТРЫ

 

Изучая главу 1, вы наверняка обратили внимание на то, что методы обработки событий определяются с ключевым словом__fastcall, например:

 

void __fastcall ТForm1:: Button2Click(TObject * Sender)

{

Close ( );

}

 

Ключевое слово__fastcall (в пер. с англ. — быстрый вызов) указывает, что при вызове метода параметры передаются через внутренние регистры процессора, а не как обычно — через стековую память. Это существенно увеличивает быстродействие программы, поэтому все функции библиотеки VCL, в том числе методы объектов, реализованы таким образом.

 

Язык C++ определяет стандарт обслуживания исключений в рамках ООП. C++Builder предусматривает специальные механизмы для обработки исключений (ошибок), которые могут возникнуть при использовании Библиотеки Визуальных Компонент. C++Builder также поддерживает обработку исключений самой операционной системы и модель завершения работы приложения.

Когда программа встречает ненормальную ситуацию, на которую она не была рассчитана, можно передать управление другой части программы, способной справиться с этой проблемой, и либо продолжить выполнение программы, либо завершить работу. Переброс исключений (exception throwing) позволяет собрать в точке переброса информацию, которая может оказаться полезной для диагностики причин, приведших к нарушению нормального хода выполнения программы. Вы можете определить обработчик исключения (exception handler), выполняющий необходимые действия перед завершением программы. Обслуживаются только так называемые синхронные исключения, которые возникают внутри программы. Такие внешние события, как нажатие клавишCtrl+C, не считаются исключениями.

Блок кода, который может сгенерировать исключение, начинается ключевым словомtry и заключается в фигурные скобки. Если блок try обнаруживает исключение внутри этого блока, происходит программное прерывание и выполняется следующая последовательность действий:

1. Программа ищет подходящий обработчик исключения.

2. Если обработчик найден, стек очищается и управление передается обработчику исключения.

3. Если обработчик не найден, вызывается функция terminate для завершения приложения.

Блок кода, который обрабатывает возникшее исключение, начинается ключевым словомcatch и заключается в фигурные скобки. По меньшей мере один кодовый блок обработчика исключения должен следовать непосредственно за блоком try. Для каждого исключения, которое может сгенерировать программа, должен быть предусмотрен свой обработчик. Обработчики исключений просматриваются по порядку и выбирается обработчик исключения, тип которого соответствует типу аргумента в оператореcatch. При отсутствии в теле обработчика операторов goto, выполнение программы будет возобновлено, начиная с точки, следующей за последним обработчиком исключений данного блокаtry. Листинг 8 демонстрирует обобщенную схему обработки исключений.