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?

c 

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.