Так я не предлагаю исключениями кидаться, я их сам не люблю. Очень условно, у тебя сигнатура функции int some_func(void* args, void* error); Далее, у тебя есть функция char* some_func_error_helper(int retcode, void* error); которая по коду ошибки и дополнительной информации (которая запросто может быть NULL в большинстве случаев) выдает тебе удобочитаемое сообщение.
Другое дело в том, что достаточно далеко по этой дороге ты уже начинаешь руками реализовывать либо голанг-возврат (у меня так было в одной кодобазе), либо легковесные исключения.
no subject
Очень условно, у тебя сигнатура функции
int some_func(void* args, void* error);
Далее, у тебя есть функция
char* some_func_error_helper(int retcode, void* error);
которая по коду ошибки и дополнительной информации (которая запросто может быть NULL в большинстве случаев) выдает тебе удобочитаемое сообщение.
Другое дело в том, что достаточно далеко по этой дороге ты уже начинаешь руками реализовывать либо голанг-возврат (у меня так было в одной кодобазе), либо легковесные исключения.