Warum werden Fehlercodes negiert?

12

Sehr oft sehe ich in C-Code die Negation zurückgegebener Fehlercodes, zB return -EINVALstatt return EINVAL. Warum Negation verwendet?


quelle

Antworten:

8

Unter vielen UNIXen besteht die Konvention für Systemaufrufe darin, dass sie den im Fehlerfall negierten Fehlercode und im Erfolgsfall den tatsächlichen Wert zurückgeben.

Dies wird auf der Seite des Benutzerraums in -1Fehler mit dem positiven Fehlercode in errnooder dem tatsächlichen Wert im Erfolgsfall übersetzt.

Die Notwendigkeit für diese doppelte Verwendung des Rückgabewerts besteht darin, dass Mehrfachrückgaben in dieser Art von Sprache störend sind, da Sie auf die Übergabe von Out-Parametern zurückgreifen müssten, um einen eventuellen Fehler zu halten.

Lars Viklund
quelle
4

Es ist eine Konvention; Viele Funktionen liefern ein strikt positives Ergebnis beim Erfolg und ein negatives Ergebnis beim Scheitern. Ursprünglich bezog es sich auf den Rückkehrcode des Unix-Prozesses. Ein Erfolg wurde mit 0 angezeigt.

md5
quelle