Я ищу надежный способ сообщения об ошибках в библиотеке C. Рассмотрим простой пример очереди:
struct queue *q = malloc(sizeof(*q));
if (NULL == q) {
/* malloc failed. now what ? */
return NULL; /* maybe ? */
}
Хорошо, поэтому для этого примера возврат NULL
в противном случае недопустим, поэтому имеет смысл вернуть его, чтобы сигнализировать об ошибке. Но
void *get_data()
{
/* stuff */
/* Error detected. NULL is a valid return, now what ? */
/* stuff */
}
Более того, как только мы сообщаем об ошибке, как сообщить , что такое ошибка? Я думал об этом, и у меня нет удовлетворительного решения.
Использование errno
или какого-либо другого глобального объекта не
то, что я хотел бы сделать (возможно
функции могут быть вызваны из
несколько потоков и т. д.)
Я подумал о том, чтобы клиент поставлял некоторый "статусный" объект, который может быть осмотрел после звонка, но что сделает API довольно уродливым.
Так что вы думаете по этому поводу? Как отчетливо сообщать об ошибках?