Извините, но люди, которые говорят, что библиотека должна аварийно завершить работу, просто ленивы (возможно, во время рассмотрения, а также в процессе разработки).Библиотеки - это коллекции функций.Код библиотеки не должен «просто падать» больше, чем другие функции в вашем программном обеспечении должны «просто падать».
Конечно, библиотеки могут иметь некоторые проблемы, связанные с передачей ошибок через границу API, если несколько языков или (относительно) экзотические языковые функции, такие как исключения, обычно включаются, но в этом нет ничего особенного.На самом деле, это всего лишь часть бремени написания библиотек, а не кода внутри приложения.
За исключением случаев, когда вы действительно не можете оправдать накладные расходы, каждый интерфейс между системами должен реализовывать проверку работоспособности или, что лучше, дизайнпо контракту, для предотвращения проблем безопасности, а также ошибок.
Есть несколько способов справиться с этим. Что вам, вероятно, следует сделать, в порядке предпочтения, это один из:
Используйте язык, который поддерживает исключения (или, лучше, дизайн по контракту) в библиотеках, и генерируйте исключение или допускайте сбой контракта.
Предоставьте ошибкуобработать сигнал / слот или механизм перехвата / обратного вызова и вызвать любые зарегистрированные обработчики.Необходимо, чтобы при инициализации вашей библиотеки был зарегистрирован как минимум один обработчик ошибок.
Поддержка возврата некоторого кода ошибки в каждую функцию, которая может произойти сбой по любой причине.Но это старый, относительно безумный способ делать вещи из C (в отличие от C ++) дней.
Установить глобальный флаг «произошла ошибка» и разрешить очистку этого флагадо звонков.Это также старо и полностью безумно, в основном потому, что оно переносит бремя обслуживания состояния ошибки на вызывающего, и небезопасно, когда дело доходит до многопоточности.