Проблема разработки, которую я пытаюсь решить, заключается в том, каким образом клиент может обрабатывать ошибки, которые могут возникнуть при вызове функций библиотеки.Я вижу 2 подхода:
I. Поместить все ошибки, которые могут быть вызваны любыми библиотечными функциями, в публичный отдельный заголовочный файл, например, lib_errors.h
:
#define APP_ERR_OBJECT_TOO_SMALL 1 /* The object is too small */
#define APP_ERR_HOST_UNREACHABLE 2 /* Host is not reachable */
#define APP_ERR_UNKNOWN 3 /* Unknown error */
И включить его во все общедоступные заголовочные файлы библиотеки.
header1.h
:
#include "lib_errors.h"
/**
* -1 - on error
* error_code is set to APP_ERR_OBJECT_TOO_SMALL the buf is too small
* error_code is set to APP_ERR_UNKNOWN in case of unknown error
*/
int hdr1_drain(void *buf, size_t sz, int *error_code);
header2.h
:
#include "lib_errors.h"
/**
* -1 - on error
* error_code is set to APP_ERR_HOST_UNREACHABLE if the host is unreachable
* error_code is set to APP_ERR_UNKNOWN in case of unknown error
*/
int hdr2_connect(char *add, int *error_code);
Проблема, которую я вижу: Все ошибки, которые может вызвать библиотека, будут включены в каждый из файлов заголовка, даже те, которые сам заголовок не вызывает.
II. Чтобы определить характерные для заголовка ошибки в каждом заголовочном файле:
header1.h
:
#define HDR1_OBJECT_TOO_SMALL 1
#define HDR1_UNKNOWN 2
header2.h
#define HDR2_HOST_UNREACHABLE 1
#define HDR2_UNKNOWN 2
Проблема, которую я вижу : Количество дубликатов кода увеличивается с увеличением числа распространенных ошибок.Все распространенные ошибки должны быть продублированы в каждом общедоступном заголовочном файле.
Так что я сейчас не знаю, какой из них выбрать.Вероятно, есть другой способ решения проблемы дизайна.Первый подход кажется ближе к POSIX errno
.