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


12

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

c 

Ответы:


8

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

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

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


4

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.