¿Por qué se niegan los códigos de error?

12

Muy a menudo veo en el código C negación de códigos de error devueltos, por ejemplo, en return -EINVALlugar de return EINVAL. ¿Por qué usó la negación?


fuente

Respuestas:

8

En muchos UNIXen, la convención para las llamadas al sistema es que devuelven el código de error negado en caso de error y el valor real en caso de éxito.

Esto se traduce en el lado del espacio del usuario -1para errores con el código de error positivo errnoo el valor real en caso de éxito.

La necesidad de este doble propósito del valor de retorno se debe a que los retornos múltiples en este tipo de lenguaje son molestos, ya que tendrías que recurrir a pasar parámetros fuera para contener un error eventual.

Lars Viklund
fuente
4

Es una convención; Muchas funciones devuelven un resultado estrictamente positivo en caso de éxito y un resultado negativo en caso de fracaso. Inicialmente, estaba relacionado con el código de retorno del proceso de Unix. Un éxito fue indicado por 0.

md5
fuente