Pourquoi les codes d'erreur sont annulés?

12

Très souvent, je vois dans le code C la négation des codes d'erreur renvoyés, par exemple return -EINVALau lieu de return EINVAL. Pourquoi avoir utilisé la négation?


la source

Réponses:

8

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 -1pour 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.

Lars Viklund
la source
4

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.

md5
la source