с учетом этого и этого , вот моя стратегия (аналогичная функциям Win32 API):
1) Зарезервировать возвращаемое значение для указания успеха (ненулевое значение), ошибка (0).
2) используйте errno, perror, чтобы получить больше информации. по типу ошибки.
3) использовать параметры для возврата значений.
Если это нормально, тогда я могу определить свои собственные коды ошибок (не противоречащие существующим кодам) и использовать errno для их установки / получения. Я не думаю, что теперь я смогу использовать perror с этими кодами (он всегда скажет: неизвестная ошибка), но я могу определить свою собственную функцию на основе регистра переключателя, чтобы получить описание кода ошибки. уже сделано много, чтобы сделать errno современным и безопасным для потоков.
например:
int val;
if(MyPop(&val))
pintf_s("\n %d popped from my stack. . .",val);
else
printf_s(Myperror());
Спасибо.