Muitas vezes vejo na negação do código C dos códigos de erro retornados, por exemplo, em return -EINVAL
vez de return EINVAL
. Por que usar negação?
12
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 -1
para erros com o código de erro positivo in errno
ou 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.
É 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.