Très souvent, je vois dans le code C la négation des codes d'erreur renvoyés, par exemple return -EINVAL
au lieu de return EINVAL
. Pourquoi avoir utilisé la négation?
Sur de nombreux UNIXen, la convention pour les appels système est qu'ils renvoient le code d'erreur annulé en cas d'erreur et la valeur réelle en cas de succès.
Ceci est traduit du côté de l'espace utilisateur en -1
pour les erreurs avec le code d'erreur positif dans errno
, ou la valeur réelle en cas de succès.
La nécessité de ce double objectif de la valeur de retour est due au fait que les retours multiples dans ce type de langage sont gênants, car vous devrez recourir à la transmission de paramètres de sortie pour contenir une éventuelle erreur.
C'est une convention; de nombreuses fonctions renvoient un résultat strictement positif en cas de succès et un résultat négatif en cas d'échec. Initialement, il était lié au code retour du processus Unix. Un succès a été indiqué par 0.