Почему коды ошибок отменяются?

12

Очень часто я вижу в коде C отрицание возвращенных кодов ошибок, например return -EINVALвместо return EINVAL. Почему используется отрицание?


источник

Ответы:

8

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

Это переводится на стороне пользователя в пространство -1для ошибок с положительным кодом ошибки errnoили фактическим значением в случае успеха.

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

Ларс Виклунд
источник
4

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

md5
источник