Por que códigos de erro são negados?

12

Muitas vezes vejo na negação do código C dos códigos de erro retornados, por exemplo, em return -EINVALvez de return EINVAL. Por que usar negação?


fonte

Respostas:

8

Em muitos UNIXen, a convenção para syscalls é que eles retornam o código de erro negado em caso de erro e o valor real em caso de sucesso.

Isso é traduzido no espaço do usuário -1para erros com o código de erro positivo in errnoou o valor real em caso de sucesso.

A necessidade desse propósito duplo do valor de retorno é porque o retorno múltiplo nesse tipo de linguagem é incômodo, pois você teria que recorrer a parâmetros externos para conter um eventual erro.

Lars Viklund
fonte
4

É uma convenção; muitas funções retornam um resultado estritamente positivo no sucesso e um resultado negativo no fracasso. Inicialmente, estava relacionado ao código de retorno do processo Unix. Um sucesso foi indicado por 0.

md5
fonte