Re: Оформление обработки ошибок в plain C
От: TheCat Россия abokov.livejournal.com
Дата: 18.06.04 07:21
Оценка: 1 (1) +1
Здравствуйте, postmaster, Вы писали:

P>В свете дискуссии здесь
Автор: Maxim S. Shatskih
Дата: 11.06.04
возник интересный вопрос: как вы оформляете код на plain C, который проверяет возвращаемый код из цепочки вызываемых функций?


P>Я в своей практике встречал следующие варианты:


еще один вариант — "липовый" do {}while(0);
int f()
{
int failed;
void *obj1=NULL;
void *obj2=NULL;
do {
if (!(failed=construct_obj1(&obj1)))
break;
if (!(failed=construct_obj2(&obj2)))
break;
failed=do_something(obj1,obj2);
} while(false);

if (obj1!=NULL)
destruct_obj1(obj1);
if (obj2!=NULL)
destruct_obj2(obj1);
return failed;
}


плюсы :
+ в любом месте можно выйти из него простым break не заботясь о вызове деструкторов
+ все деструкторы вызываются в одном месте
+ несмотря на похожесть на вариант с goto тут нет меток
+ внутри do {} while() можно завести какой локальный объект внутри тела блока.
минусы :
— кому то может показаться что do {} while() используется не по делу)
— код все таки уползает вправо хотя и медленно.
— проверки на NULL режут глаз
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.