@Gryphon88

Какой подход позволяет вынести обработку ошибок в отдельный файл?

Здравствуйте,
я понимаю, что косовато задал вопрос, попробую пояснить на примере. Когда мы работаем, например, с libusb, мы пишем как-то так
ret  = libusb_init(&ctx); //Инициализация библиотеки
if (ret < 0) { //Что-то странное, libusb работать не хочет
    goto init_err_mark; 
}
devh = libusb_open_device_with_vid_pid(ctx, 1234, 5285); 
if(devh == NULL) { //Устройство не открылось
    goto devh_err_mark;
}
ret = libusb_claim_interface(devh, 0); 
if(ret < 0) { //Интерфейс не открывается
    goto iface_err_mark;
}
... //Собственно работаем с устройством
//Освобождаем ресурсы
    libusb_release_interface(devh, 0);
iface_err_mark: 
    libusb_close(devh);
devh_err_mark:
    libusb_exit(ctx);
init_err_mark:
    return ret;

т.е. сначала инициализируем ресурс, причём ошибка на любом шаге инициализации означает прекращение работы, а потом в обратном порядке ресурсы освобождаем. Такой код немного неудобно читать и писать, отвлекаешься на ветки "что-то пошло не так". Прошу подсказать способ писать сценарии корректной работы и обработки ошибок раздельно, у меня монады, future и promise в голове перемешались.
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы