Я также предоставлю дополнительную функцию, которая возвращает последнюю ошибку
Это повлекло бы за собой глобальную переменную в стиле errno
, содержащую последнюю ошибку, верно?Я бы посоветовал против этого, поскольку это затруднило бы использование вашей библиотеки в многопоточном приложении, если только вы не используете локальное хранилище потоков.Тем не менее, если вы хотите сделать это, то стандартной библиотекой C с ее errno
переменной / макросом будет хороший пример.
Более простой и, IMHO, лучший подход - просто возвращать коды ошибокнеобходимо предоставить некоторые функции, которые работают с вашими кодами ошибок;Например, вы можете захотеть иметь mylib_strerror
для преобразования их в удобочитаемые строковые представления.Таким образом, использование будет выглядеть следующим образом:
int err = mylib_operation_that_might_fail();
if (err != 0) {
fprintf("%s\n", mylib_strerror(err));
exit(1);
}
Хорошим примером этого стиля является API getaddrinfo
, указанный в RFC 3493 .