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?
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?
Respostas:
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.