Dlaczego kody błędów są zanegowane?

12

Bardzo często widzę w kodzie C negację zwracanych kodów błędów, np. return -EINVALZamiast return EINVAL. Dlaczego używał negacji?


źródło

Odpowiedzi:

8

W wielu systemach UNIXen konwencja dla wywołań systemowych polega na tym, że zwracają kod błędu zanegowany w przypadku błędu, a rzeczywistą wartość w przypadku sukcesu.

To jest tłumaczone po stronie użytkownika -1na błędy z dodatnim kodem błędu w errnolub rzeczywistą wartością w przypadku sukcesu.

Konieczność podwójnego celowania wartości zwracanej wynika z tego, że wielokrotne zwroty w tego rodzaju języku są uciążliwe, ponieważ trzeba będzie uciekać się do przekazania parametrów wyjściowych, aby zatrzymać ewentualny błąd.

Lars Viklund
źródło
4

To konwencja; wiele funkcji zwraca bardzo pozytywny wynik w przypadku sukcesu, a ujemny w przypadku niepowodzenia. Początkowo był związany z kodem powrotu procesu uniksowego. Sukces został wskazany przez 0.

md5
źródło