Очень часто я вижу в коде C отрицание возвращенных кодов ошибок, например return -EINVAL
вместо return EINVAL
. Почему используется отрицание?
Очень часто я вижу в коде C отрицание возвращенных кодов ошибок, например return -EINVAL
вместо return EINVAL
. Почему используется отрицание?
Ответы:
На многих UNIXen, соглашение для системных вызовов заключается в том, что они возвращают код ошибки, аннулированный в случае ошибки, и фактическое значение в случае успеха.
Это переводится на стороне пользователя в пространство -1
для ошибок с положительным кодом ошибки errno
или фактическим значением в случае успеха.
Необходимость такого двойного назначения возвращаемого значения заключается в том, что множественные возвраты в этом языке являются утомительными, так как вам придется прибегнуть к передаче out-параметров для удержания возможной ошибки.