Я ищу надежный способ сообщить об ошибках в библиотеке 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 довольно уродливым.
Итак, что вы берете на себя? Как вы сообщаете об ошибках чистым способом?