Sehr oft sehe ich in C-Code die Negation zurückgegebener Fehlercodes, zB return -EINVAL
statt return EINVAL
. Warum Negation verwendet?
Sehr oft sehe ich in C-Code die Negation zurückgegebener Fehlercodes, zB return -EINVAL
statt return EINVAL
. Warum Negation verwendet?
Antworten:
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.