Использование errno с пользовательскими кодами ошибок? - PullRequest
1 голос
/ 22 июня 2011

с учетом этого и этого , вот моя стратегия (аналогичная функциям 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());

Спасибо.

1 Ответ

3 голосов
/ 22 июня 2011

Я не думаю, что кто-нибудь в наше время разработал бы систему обработки ошибок, такую ​​как errno.Даже если errno реализован с использованием локального хранилища потоков, он все еще далек от идеала - он по-прежнему является глобальной переменной.

Поскольку вы не обрабатывали ошибки на основе исключений, я бы порекомендовалвозвращая коды ошибок в качестве возвращаемых значений функции.Это позволяет использовать стек, избегать глобального состояния и, следовательно, быть устойчивым к потокам и моделям повторного входа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...