1
314______________________________________________Глава 4

Следующие операторы регистрируют эти функции:

atexit(myexiti);                                                         ''
atexit(myexit2);

Они могут быть включены, например, в обработчик события OnCreate главной
формы приложения. Тогда при выполнении в любой точке программы вызова фун- ,
кции exit выполнятся операторы функции myexit2, затем операторы функции ту- '
exiti, затем выполнятся зачистки по умолчанию (закрытие файлов и буферов), по-
сле чего произойдет завершение приложения.

Приведем пример функции myexiti, удаляющей в рабочем каталоге все вре-
менные файлы с расширением .tmp:

void myexiti(void)
{
struct ffblk ffblk;

int D;

D = findfirst("*.tmp", &ffblk, 0) ;

while (!D)
{
remove(ffblk.ff name);

D = findnext(&ffblk);

}
t

Возможность ввести в процесс собственные функции зачистки делают завер-
шение приложения вызовом ехес «мягким» по сравнению с некоторыми другими
способами.

Если приложение завершается закрытием главной формы методом Close, то
коды зачистки можно вставить в обработчики событий, происходящих при выпол-
нении этого метода (см. раздел 4.7.2). Таким образом это тоже «мягкий» способ за-
вершения приложения. Причем, он имеет дополнительные преимущества, так как
позволяет проанализировать ситуацию и в зависимости от каких-то условий завер-
шить приложение, или не завершать его.

4.9.3 Обработка исключений в блоках try ... catch

4.9.3.1 Синтаксис блоков try ... catch

Наиболее кардинальный путь борьбы с исключениями — отлавливание и об-
работка их с помощью блоков try ... catch. Синтаксис этих блоков следующий;

try

(

Исполняемый код
)

catch ( TypeToCatch )
{

Код, исполняемый в случае ошибки      •
)

Операторы блока catch представляют собой обработчик исключения. Пара-
метр TypeToCatch может быть или одним из целых типов (int, char и т.п.), или
ссылкой на класс исключения, или многоточием, что означает обработку любых
исключений. Смысл параметров целого типа будет рассмотрен ниже в разделе
4.9.4. А пока остановимся на случае, когда параметр является ссылкой на класс
исключений.

Операторы обработчика выполняются только в случае генерации в операторах
блока try исключения типа, указанного в заголовке catch. После блока try может
следовать несколько блоков catch для разных типов исключений. Таким образом,
в обработчиках catch вы можете предпринять какие-то действия: известить по