» Проектирование графического интерфейса пользователя_______________311

ются неудаленные временные файлы. Но, как говаривали древние: «Quod licet
Jovi, non licet bovi», что, наверно, можно перевести на современный язык как:

«Что дозволено Microsoft, не дозволено обычному программисту». Так что если

I   ваше приложение будет оставлять за собой «мусор», то вряд ли кто-нибудь захочет

А впредь иметь дело с вашими программами.

•     4.9.2.1 Не допускать исключений

Ш     Первый из указанных в предыдущем разделе путей предусматривает введение
у проверки перед выполнением каждой операции, способной привести к исключите-
льным ситуациям. Например, перед делением двух переменных А и В, из которых
вторая может оказаться нулем, надо проверить значение В оператором

if (В == 0)

(

// операторы, сообщающие об ошибке, исправляющие ее или

// советующие пользователю, как поступить далее

i       I
Л      else

Т           {

•       // операторы нормального продолжения программы

)

и выполнить необходимые действия, если переменная В окажется равной нулю.
Аналогично можно проверять возможность переполнения при делении, умноже-
нии и других арифметических операциях. При выделении динамически распреде-
ляемой памяти проверять успешность выполнения функции malloc можно по воз-
вращаемому ею значению, которое равно NULL, если места выделить не удалось:

if ((str = (char *,) malloc (size) ) =-= NULL)
{
ShowMessage("He хватает памяти");

return;

)

Аналогичным образом можно проверять, успешно ли завершаются операции
файлового ввода/вывода. Например:

if ((fp = fopenf'a.tmp", "w")) == NULL)
f

ShowMessage("Невозможно открыть файл 'a.tmp'");

return ;

)

При использовании библиотечных функций вы не можете проверять отдель-
ные операции, которые они производят. В этом случае можно перед каждым обра-
щением к функции или процедуре производить проверку допустимости всех ее ар-
гументов.

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

Конечно, надо понимать, что слово «бессбойная» недаром поставлено в кавыч-
ки. Сложные программы, увы, всегда содержат ошибки и возможности сбоя. Даже
тщательная предварительная проверка всех операций не способна это устранить. У
вас всегда остается множество возможностей сделать ошибки в своей программе,
начиная с принципиальных погрешностей алгоритмов, и кончая тривиальным вы-
ходом индекса массива за допустимые пределы. Но все-таки многочисленные тща-
тельные проверки всех операций повышают надежность программы.