Re[2]: Оформление обработки ошибок в plain C
От: aka50 Россия  
Дата: 18.06.04 07:39
Оценка:
Здравствуйте, TheCat, Вы писали:

TC>еще один вариант — "липовый" do {}while(0);

TC>int f()
TC>{
TC> int failed;
TC> void *obj1=NULL;
TC> void *obj2=NULL;
TC> do {
TC> if (!(failed=construct_obj1(&obj1)))
TC> break;
TC> if (!(failed=construct_obj2(&obj2)))
TC> break;
TC> failed=do_something(obj1,obj2);
TC> } while(false);

TC> if (obj1!=NULL)

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


TC>плюсы :

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

— если внутри есть еще цикл или case, то выход затруднителен... надо goto пользовать...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.