Sehr oft sehe ich in C-Code die Negation zurückgegebener Fehlercodes, zB return -EINVAL
statt return EINVAL
. Warum Negation verwendet?
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 -1
Fehler mit dem positiven Fehlercode in errno
oder 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.
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.